MCP Server
Connect Claude Desktop, Cursor or any MCP client to the samreshuuu connector catalog and Python sandbox.
What it is
The server speaks Model Context Protocol over Streamable HTTP at https://samreshuuu.ru/mcp/ (with the trailing slash). The protocol version is negotiated with the client on connect; the server accepts 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25 and answers a client offering an unknown revision with 2025-11-25. External clients get the organization's connector catalog and the Python sandbox.
The server is stateless: every POST is handled on its own and no Mcp-Session-Id is issued. There is no local stdio server and no legacy HTTP+SSE transport; a stdio-only client needs the mcp-remote bridge (see the Claude Desktop example below).
Connect a client
Drop the snippet below into the Cursor mcp.json or your client's equivalent. Ready-made configs with your server address are in Settings, API keys.
Create an API key in settings →
Claude Desktop
The Claude Desktop config only launches local servers, so it reaches a remote server with a key through the mcp-remote bridge. It needs Node.js 18 or newer. Open Settings → Developer → Edit Config and paste into claude_desktop_config.json:
The header goes through an environment variable because a space inside args breaks the launch on Windows. Restart Claude Desktop after saving.
Claude Code
Codex
In ~/.codex/config.toml the key is read from an environment variable (without the Bearer prefix):
VS Code
In .vscode/mcp.json:
Authentication
Every HTTP request to /mcp/ carries an Authorization: Bearer sk-org-… header. User and organization come from the key; no X-Org-Id is needed. A request without a usable key is answered before the MCP message is read, with HTTP 401, a WWW-Authenticate: Bearer realm="samreshuuu" header and the detail body of the native API (not the error object of /v1):
| HTTP | Code | Meaning | Retry |
|---|---|---|---|
| 401 | AUTH_HEADER_MISSING | Missing authorization header. | no |
| 401 | AUTH_TOKEN_INVALID | Invalid authorization token. | no |
| 401 | AUTH_INVALID_CREDENTIALS | We couldn't verify the sign-in. Try again. | no |
AUTH_HEADER_MISSING means there is no Authorization header; AUTH_TOKEN_INVALID, that the header is not Bearer sk-org-…; AUTH_INVALID_CREDENTIALS, that the key is unknown, revoked or expired.
The server does not support OAuth 2.1 (authorization server discovery, dynamic client registration): only the key in the header. If a client connects remote servers through OAuth only, use the mcp-remote bridge with the header, as for Claude Desktop.
Key scopes: reads (list_services, describe_service and read calls of connector_execute) need tools:read. Write calls of connector_execute and every repl_execute need tools:write, which includes tools:read. Without the scope a call answers AUTH_PERMISSION_DENIED. Whether a call writes is decided by the connector classifier, not the HTTP method: a read-only POST (a marketplace report, say) passes with a tools:read key. The chat:write scope does not open MCP; it opens the OpenAI-compatible API.
Public info endpoint
GET /api/v1/mcp/info returns the URL, the server name for the client config (samreshuuu-coworker), the accepted protocol revisions in protocol_versions (oldest to newest) and the preferred one in preferred_protocol_version, the supported scopes and an example config. The endpoint is unauthenticated: handy for generating client snippets.
Available tools
Every call runs on the organization's shared connected accounts and the key's sandbox; the key creator's personal accounts and memory stay closed. The table is the server's own tool registry; the description is the first line of what a client is sent.
| Tool | Key scope | Hints | Description |
|---|---|---|---|
list_services | tools:read (included in tools:write) | read-only | Catalog of every integration this server offers, connected by this account or not: canonical service id and a one-line summary each. |
describe_service | tools:read (included in tools:write) | read-only | Schema passport of one service. Without module: an index (~5 KB for most services, up to 26 KB, ~45 KB for the widest catalogs) with the summary, transport, call template, _available_modules, critical hints, response notes and recipe headlines. With module set to one of _available_modules: that module's recipes with bodies, rate limits, field hints, pagination, verb matrix and response examples. |
connector_execute | tools:write for writes, tools:read for reads | may change data, counts toward the key's limit | One REST or RPC call to a service the organization connected and shared, validated against its schema. Use the current describe_service passport. A key reaches connections shared with the organization; one visible only to the key's creator stays with that person. |
repl_execute | tools:write on every call | may change data, counts toward the key's limit | Run Python in this API key's sandbox: reports, joins, arithmetic, fetch-and-compute flows. Human consent requires connector_execute; policy-approved writes can run here. |
Parameters:
list_services: none. It lists which services exist, not which the user has connected; internal services are not listed.describe_service:service,module?. Without module it returns the service index: modules, call template, recipe headlines. With module: recipes with bodies, rate limits, field and pagination hints, plus version/ttl for client-side caching.connector_execute:service,method,path?,module?,body?,query?. REST: HTTP method and path, module is resolved from the recipes. RPC (bitrix24, onec, …): module (e.g. crm), the RPC method in method (crm.deal.list), empty path. With several accounts connected, name one:service="wildberries:<name>"; there is no separate cabinet argument, and an undeclared argument (such as the formerinstance_id) is refused withTOOL_VALIDATION_FAILED.repl_execute:code,skills?,timeout_seconds?. Python in the sandbox bound to this key. Returns stdout, stderr, exit_code, error, files, truncated.
Connector secrets (API keys, tokens, passwords) never enter the sandbox environment: code reaches a connector through the host, which holds its credentials. Over MCP, repl_execute does not receive the user's own variables either, and its output is screened with detected secrets masked.
Typical call sequence:
Limits and long calls
connector_execute and repl_execute count toward the key's request limit, set by the organization's plan; list_services and describe_service do not. During a long connector_execute or repl_execute the server sends progress notifications at a short interval if the client passed a progressToken, so a client that resets its timeout on progress will not cut the call. A repl_execute timeout_seconds above the sandbox ceiling is capped to it. Connector and sandbox output is screened, and detected secrets are masked.
Skill resources
Every enabled skill is exposed as an MCP resource at skill://{name}. The body is the skill's system prompt with a hint on how to call connector_execute against the bound service. The server populates resources for all enabled skills on the first authenticated request, so resources/list enumerates them all.
Errors
A tool failure arrives as a call result with isError: true; its text carries a JSON object {code, message, retryable, hint?, details?}. The MCP SDK may prefix the text with Error executing tool …:; the JSON follows the prefix. details holds data about the failure (candidates, suggestions), not instructions. A key failure comes earlier, as HTTP 401 (see Authentication).
Every code is a row of the server's error registry, the same one the HTTP API answers with. The door's own refusals:
TOOL_VALIDATION_FAILED: the connector is not in the catalog, the module is unknown or could not be inferred from the recipes, or an argument is invalid. Close names are in details.suggestions, modules in details.known_modules; fix the call and send it again.UNKNOWN_INSTANCE: the named account is not connected, or several are connected and none is named. The list is in details.candidates.AUTH_PERMISSION_DENIED: the key lacks the scope the tool asks (tools:readfor a read,tools:writefor a write call or repl_execute).APPROVAL_NOT_ASKABLE: the write needs approval and MCP has no one to ask; retrying will not help, run the action in chat, where it can be approved.TOOL_AUTO_REVIEW_BLOCKED: auto-review forbade the write (a secret goes to a service other than the one that issued it); approval does not lift this.RATE_LIMIT_EXCEEDED: the key's request limit is exceeded, waitdetails.retry_after_s.
A failed connector call relays the registry code of its failure (see Errors & rate limits). The retryable field of the result is the verdict for this very call and takes precedence over the table's column, which describes the code in general.
When a refusal was raised under a connector or gateway spelling of its own, that spelling rides in details.connector_code for diagnostics. Branch on code: connector_code names the raise site and grows with the connectors.