MCP Tools
The four meta tools exposed by the Runstack MCP server — search_tools, check_authentication, initiate_connection, and execute_tool.
Source: https://runstack.engineer/docs/mcp-tools
The Runstack MCP server at https://app.runstack.engineer/mcp exposes four meta tools instead of hundreds of per-app tools. Clients (Cursor, VS Code, custom agents) call these to search the registry, handle OAuth, and run toolkit actions. Auth with Authorization: Bearer rnsk_… — see API Keys.
Individual toolkit tools live in the registry; the model discovers them through search_tools at runtime.
search_tools
Search the Runstack tool registry with a short natural-language query (2-5 keywords). Results are compact and ranked by relevance — top 5 by default.
search_tools({
query: string, // keywords, e.g. "github repo issues"
toolkitIds?: string[], // e.g. ["github"], restrict to toolkits
scope?: "read" | "write" | "delete",
limit?: number, // default 5, max 5
offset?: number, // pagination when hasMore is true
expand?: string // exact tool name for its full input schema
})
Returns: Ranked compact matches (name, description, toolkitId, scope, score) plus total/returned/hasMore. Pass expand with an exact tool name to get its full input schema in the same response.
Example:
search_tools({ query: "github repo issues" })
search_tools({ query: "github repo issues", expand: "githubCreateIssue" })
Does not count toward your usage limit.
check_authentication
Verify that the current user has connected a provider required by a tool.
check_authentication({
toolName: string // exact tool name from search_tools
})
Returns:
// Authenticated
{ "authenticated": true, "toolName": "github_create_issue" }
// Not authenticated
{
"authenticated": false,
"toolName": "github_create_issue",
"requiredAuth": "githubToken",
"reason": "token_missing"
}
Reasons:
| Reason | Meaning |
|---|---|
no_auth_required | Tool works without a connection |
token_missing | Provider not connected in Runstack |
user_not_found | API key user has no Runstack account |
Does not count toward your usage limit.
initiate_connection
Get an OAuth URL the user can open to connect a provider.
initiate_connection({
provider: string // "github" | "notion" | "gmail" | "linear" | "google-sheets" | "googlecalendar"
})
Returns:
{
"link": "https://app.runstack.engineer/auth/provider/github",
"provider": "github"
}
The user opens the link, completes OAuth, then retries the tool call. Skip this when check_authentication returns authenticated: true.
Does not count toward your usage limit.
execute_tool
Execute any registered tool by name with the provided arguments.
execute_tool({
toolName: string, // exact name from search_tools
args: Record<string, unknown> // key-value arguments
})
Returns:
// Success
{
"toolName": "github_create_issue",
"success": true,
"result": { "number": 42, "url": "https://github.com/..." }
}
// Failure — invalid arguments
{
"error": "Invalid arguments for tool",
"toolName": "github_create_issue",
"expectedParameters": { "owner": { "type": "string" } },
"providedParameters": ["owner"]
}
// Failure — not connected
{
"error": "Tool requires connection",
"toolName": "github_create_issue",
"requiredAuth": "githubToken",
"message": "Use initiate_connection(provider) to connect."
}
Counts toward your usage limit. OAuth tokens are injected server-side — never pass tokens in args.
HTTP endpoint
POST https://app.runstack.engineer/mcp
Protocol: Streamable HTTP (JSON-RPC)
Auth: Authorization: Bearer rnsk_<your_api_key>
| Status | Meaning |
|---|---|
401 | Missing, invalid, or malformed API key |
429 | Usage limit reached for this key |
500 | Internal server error |
Connect a client
| Client | Guide |
|---|---|
| Cursor | Cursor |
| VS Code | VS Code |
| Windsurf | Windsurf |
| Zed | Zed |
| Antigravity | Antigravity |
| Claude Desktop | Claude Desktop |
| Claude Code | Claude Code |
| ChatGPT | ChatGPT |
| Codex CLI | Codex CLI |
| Gemini CLI | Gemini CLI |
| Warp | Warp |
| JetBrains IDEs | JetBrains |
| OpenCode | OpenCode |
| Cline | Cline |
| Kiro | Kiro |
| LM Studio | LM Studio |
| n8n | n8n |
| GitHub Copilot CLI | GitHub Copilot |
| Kilo Code | Kilo Code |
| OpenClaw | OpenClaw |
| Trae | Trae |
| Hermes Agent | Hermes |
| Custom agent | Custom Agent |
For stdio without hand-rolling transport, use @rnsk/mcp.