Setu Recipes: reusable workflows across every app.Browse templates
Setuसेतु
Documentation menu

MCP

Setu runs a Model Context Protocol server over streamable HTTP, so Cursor, Claude Desktop, Claude Code and other MCP clients can use your connected apps with no code.

Create a session#

Shell
curl -X POST $SETU_BASE_URL/v1/sessions \
  -H "authorization: Bearer $SETU_API_KEY" \
  -H "content-type: application/json" \
  -d '{"user_id":"user_1","toolkits":["github","slack"]}'
JSON
{
  "session_id": "ses_...",
  "mcp_url": "https://api.setuagent.com/v1/mcp/ses_...",
  "expires_at": "2026-10-14T09:00:00.000Z"
}

Paste mcp_url into the client. For Claude Code:

Shell
claude mcp add --transport http setu "https://api.setuagent.com/v1/mcp/ses_..."

Treat the URL as a secret. It carries 256 bits of randomness and no other credential. Create one session per end user, keep the lifetime short (ttl_seconds), and never put it in a log or a shared channel.

Dynamic mode (default)#

The server exposes four meta-tools, so the model never has to load the whole catalog:

Tool Purpose
SETU_SEARCH_TOOLS Find tools by describing the task
SETU_GET_TOOL_SCHEMA Fetch the input schema for one tool
SETU_EXECUTE_TOOL Run a tool with arguments
SETU_CONNECT Get a link for the user to connect a toolkit that is not connected yet

If the model tries a toolkit the user has not connected, the result includes a connect_url it can show to the user.

Static mode#

Pass "mode": "static" with an explicit actions list to register each action as its own MCP tool. Use it when you want a small, fixed tool surface:

JSON
{ "user_id": "user_1", "mode": "static", "actions": ["github.create_issue", "slack.post_message"] }

Limits#

Sessions expire after ttl_seconds. Calls made through MCP count against the same rate limits and monthly quota as REST calls, and appear in the same execution log.