MCP Server
Connect any MCP-compatible client to the Runstack MCP server at /mcp and access 150+ tools across all your connected services.
The Runstack MCP server exposes your connected services as tools via the Model Context Protocol. Any MCP-compatible client — Claude Desktop, Cursor, custom agents — can call Runstack tools using a single authenticated endpoint.
Endpoint
POST https://app.runstack.engineer/mcpProtocol: Streamable HTTP (stateless JSON-RPC)
Auth: Authorization: Bearer rsk_<your_api_key>
How it works
The server exposes 4 meta tools instead of 150+ individual tools. This prevents context bloat and lets the AI dynamically discover and execute exactly the tools it needs:
search_tools → find tools by regex pattern
check_authentication → verify a connector is linked
initiate_connection → get OAuth URL for a provider
execute_tool → run any registered tool by nameWhen you ask your MCP client to "create a GitHub issue", it:
- Calls
search_tools("github.*issue")→ findsgithub_create_issue - Calls
check_authentication("github_create_issue")→ confirms your GitHub token is linked - Calls
execute_tool("github_create_issue", { owner, repo, title, body })→ creates the issue
Client setup
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"runstack": {
"url": "https://app.runstack.engineer/mcp",
"headers": {
"Authorization": "Bearer rsk_YOUR_API_KEY"
}
}
}
}Restart Claude Desktop after saving.
Cursor
In Cursor's MCP settings (.cursor/mcp.json or via the UI):
{
"runstack": {
"url": "https://app.runstack.engineer/mcp",
"headers": {
"Authorization": "Bearer rsk_YOUR_API_KEY"
}
}
}Custom agent (TypeScript)
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const client = new Client({ name: 'my-agent', version: '1.0.0' });
const transport = new StreamableHTTPClientTransport(
new URL('https://app.runstack.engineer/mcp'),
{
requestInit: {
headers: { Authorization: 'Bearer rsk_YOUR_API_KEY' },
},
},
);
await client.connect(transport);
// List available tools
const tools = await client.listTools();
console.log(tools);Custom agent (Python)
import httpx
import json
MCP_URL = "https://app.runstack.engineer/mcp"
API_KEY = "rsk_YOUR_API_KEY"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
}
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search_tools",
"arguments": {"pattern": "github", "searchIn": "both"},
},
"id": 1,
}
response = httpx.post(MCP_URL, json=payload, headers=headers)
print(response.json())Error responses
| Status | Meaning |
|---|---|
401 | Missing, invalid, or malformed API key |
429 | Usage limit reached for this key |
500 | Internal server error (see error.message) |
CORS
The /mcp endpoint includes CORS headers for browser-based clients:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization