MCP server
Agents connect with a scoped, revocable API key. Tools a key has no scope for are not listed, and every call is checked again by the REST API.
Use with your AI agent#
Agents connect to the MCP server with an API key. In Steerpost, open Developer → MCP connections, name the
connection, tick the scopes you are comfortable with and copy the key: it is shown once, together with a ready-to-paste
config. The MCP endpoint is https://mcp.<your-domain>/mcp on a server and http://localhost:3333/mcp locally.
Auth today is an API key sent as
Authorization: Bearer sk_live_…. OAuth 2.1 for MCP clients is planned and not available yet.
| Tool | Scope | Risk |
|---|---|---|
list_social_accounts, get_social_account | social:read | safe |
list_posts, get_post, get_post_status | posts:read | safe |
get_analytics, get_usage | analytics:read | safe |
create_draft, update_post | posts:write | safe / |
cancel_scheduled_post | posts:write | medium |
schedule_post | posts:schedule | medium |
publish_post | posts:publish | sensitive, needs the owner's approval |
delete_post | posts:delete | sensitive, needs the owner's approval |
disconnect_account | social:disconnect | critical, needs the owner's approval |
Revoking a connection invalidates its key at once. Keys can never create keys or change account security. Replace
mcp.example.com and sk_live_... below with your own values.
Claude Code
claude mcp add --transport http steerpost https://mcp.example.com/mcp \
--header "Authorization: Bearer sk_live_..."
Cursor (~/.cursor/mcp.json or .cursor/mcp.json)
{
"mcpServers": {
"steerpost": {
"url": "https://mcp.example.com/mcp",
"headers": { "Authorization": "Bearer ${env:STEERPOST_API_KEY}" }
}
}
}
Set STEERPOST_API_KEY in the environment Cursor starts from, or paste the key in place of the variable.
Claude Desktop (claude_desktop_config.json)
Claude Desktop starts a local process. Bridge it to your server with mcp-remote (community package, pinned to an exact version; upgrade it deliberately, never use an unpinned npx -y):
{
"mcpServers": {
"steerpost": {
"command": "npx",
"args": [
"-y", "mcp-remote@0.14.3", "https://mcp.example.com/mcp",
"--header", "Authorization:${SOCIALOS_AUTH_HEADER}"
],
"env": { "SOCIALOS_AUTH_HEADER": "Bearer sk_live_..." }
}
}
}
Or run the Steerpost MCP server itself in stdio mode from a checkout (cd mcp && npm ci && npm run build):
{
"mcpServers": {
"steerpost": {
"command": "node",
"args": ["/path/to/steerpost/mcp/dist/index.js", "--stdio"],
"env": {
"STEERPOST_API_URL": "https://api.example.com",
"STEERPOST_API_KEY": "sk_live_..."
}
}
}
}
Then ask, for example: "Write a post about my new Flutter project and schedule it for tomorrow 12:00 on LinkedIn and Telegram." More clients and every server option: mcp/README.
Server reference#
TypeScript MCP server (official @modelcontextprotocol/sdk) that exposes the Steerpost REST API as 14 tools.
It holds no state and no social-network credentials: every call is forwarded to the REST API with the caller's API key.
Tools are listed per key scope (GET /me), and the REST API enforces scopes again on every call.
| Env | Default | |
|---|---|---|
STEERPOST_API_URL (legacy SOCIALOS_API_URL) | http:/ | REST base (/ is appended if missing) |
STEERPOST_API_KEY (legacy SOCIALOS_API_KEY) | – | stdio mode only |
PORT /HOST | 3333 /0.0.0.0 | HTTP mode |
STEERPOST_TIMEOUT_MS (legacy SOCIALOS_TIMEOUT_MS) | 15000 | upstream timeout |
npm install && npm run build
npm start # Streamable HTTP: POST /mcp, GET /health
npm run start:stdio # stdio (needs SOCIALOS_API_KEY)
npm run dev # tsx watch
npm test
docker build -t socialos-local-mcp . && docker run -p 3333:3333 -e SOCIALOS_API_URL=http://api:8080 socialos-local-mcp
Dangerous tools (publish_post, delete_post, disconnect_account, and scheduling or editing a post that runs within the server's minimum lead, default 5 minutes) need the owner's approval in Steerpost: the first call answers APPROVAL_REQUIRED with an approval_id and does nothing, the owner approves under Approvals, and the agent repeats the identical call with approval_id. Grant their scopes
(posts:publish, posts:delete, social:disconnect) only to keys you trust.
Client configuration#
There is no Steerpost package on npm. Never run an npx command for a Steerpost-named package: the name is not ours, and
whoever registers it would receive your API key.
Claude Desktop, option 1: a custom connector (nothing to install). Settings, Customize, Connectors, Add custom connector:
enter the HTTPS MCP URL, choose "No sign-in" and add Authorization: Bearer sk_live_... under Request headers
(Anthropic docs). Request headers are a beta that not every plan has
yet, the server must be reachable from the internet (Claude connects from Anthropic's cloud, so localhost does not work), and
OAuth sign-in is not available for Steerpost yet.
Claude Desktop, option 2: the mcp-remote bridge (community package, MIT, pinned to an exact version). Edit
claude_desktop_config.json and restart Claude Desktop:
{
"mcpServers": {
"steerpost": {
"command": "npx",
"args": ["-y", "mcp-remote@0.14.3", "http://localhost:3333/mcp", "--header", "Authorization:${SOCIALOS_AUTH_HEADER}"],
"env": { "SOCIALOS_AUTH_HEADER": "Bearer sk_live_..." }
}
}
}
The header value lives in env so the key is not on the command line and the space in Bearer ... survives on Windows.
Upgrade the pinned version deliberately, never use an unpinned npx -y.
Claude Desktop, option 3 (local build, stdio):
{
"mcpServers": {
"steerpost": {
"command": "node",
"args": ["/path/to/steerpost/mcp/dist/index.js", "--stdio"],
"env": { "SOCIALOS_API_URL": "http://localhost:8080", "SOCIALOS_API_KEY": "sk_live_..." }
}
}
}
Remote / HTTP (clients that support Streamable HTTP with headers):
{
"mcpServers": {
"steerpost": {
"type": "http",
"url": "http://localhost:3333/mcp",
"headers": { "Authorization": "Bearer sk_live_..." }
}
}
}
Claude Code: claude mcp add --transport http steerpost http://localhost:3333/mcp --header "Authorization: Bearer $SOCIALOS_API_KEY"
Cursor (mcp.json): { "mcpServers": { "steerpost": { "url": "http://localhost:3333/mcp", "headers": { "Authorization": "Bearer ${env:SOCIALOS_API_KEY}" } } } }
Other clients without header support can use the same pinned mcp-remote@0.14.3 bridge as above.