Contents
PlatformBetaVersion 2026-10

MCP Connector API

One remote MCP server that gives Claude, ChatGPT and other AI clients the Nucleo tools of a user.

Server URL: https://mcp.nucleoplatform.com

The Nucleo connector is a remote Model Context Protocol server (protocol version 2025-06-18, Streamable HTTP transport, JSON responses). Add it as a custom connector in your AI client and sign in with your Nucleo account: the client then sees the tools of every Nucleo module you can use in the active company — Brain, Catalog, Commerce, Intelligence — with your own permissions. Delete tools are not exposed, with one exception: catalog_forget_memory deletes an entry of Atomo's memory in Catalog. A few writes cannot be reversed automatically — that one, merging duplicate contacts or tasks in Brain, and website CMS tools that the CMS marks as destructive — and carry destructiveHint: true, so your AI client can ask you before running them.

Authentication is OAuth 2.1 with discovery: the server answers 401 with a pointer to its protected-resource metadata (RFC 9728), which names Nucleo Core as the authorization server; the client registers itself (RFC 7591), runs the authorization code flow with PKCE and sends Authorization: Bearer <token> on every request. See the OAuth & OpenID Connect API.

Connect Claude (web, desktop, mobile): Settings → Connectors → Add custom connector → name Nucleo, URL https://mcp.nucleoplatform.com → Connect and sign in. Connect ChatGPT (developer mode): Settings → Connectors → Advanced → enable developer mode → Create → MCP server URL https://mcp.nucleoplatform.com, authentication OAuth → sign in.

Authentication

  • nucleoOAuthOAuth 2.0 · authorizationCode

    Access token from Nucleo Core. MCP clients obtain it automatically: protected-resource metadata → authorization server metadata → dynamic client registration → authorization code + PKCE (S256) → token (8 h) + refresh token (30 days). The user approves the client on a consent screen. Tokens of self-registered clients carry nucleo.ai_tools and work only with the AI tools.

    authorize: https://auth.nucleoplatform.com/oauth/authorize
    token: https://auth.nucleoplatform.com/oauth/token
    scopes: openid, profile, email, offline_access
Base URL
https://mcp.nucleoplatform.comProduction. The root URL is the MCP endpoint.
Who calls it
AI assistants
Endpoints
6
OpenAPI 3.1 specification
mcp.yaml

Discovery

OAuth protected-resource metadata (RFC 9728) that MCP clients read after a 401.

get/.well-known/oauth-protected-resource

Get protected-resource metadata

RFC 9728 metadata. resource is the root URL of the host you called; authorization_servers points to Nucleo Core, whose /.well-known/oauth-authorization-server lists the registration, authorization and token endpoints. Cacheable for 5 minutes.

GET https://mcp.nucleoplatform.com/.well-known/oauth-protected-resource
Authentication: None — public endpoint

Responses

  • 200Metadata.
    Headers
    • Cache-Control
    • resourcestring (uri)required
    • authorization_serversarray of string (uri)required
    • bearer_methods_supportedarray of string
      One ofheader
    • scopes_supportedarray of string
    • resource_namestring
Request
curl -X GET https://mcp.nucleoplatform.com/.well-known/oauth-protected-resource \
  -H 'Accept: application/json'
Response
{
  "resource": "https://mcp.nucleoplatform.com",
  "authorization_servers": [
    "https://auth.nucleoplatform.com"
  ],
  "bearer_methods_supported": [
    "header"
  ],
  "scopes_supported": [
    "openid",
    "profile",
    "email"
  ],
  "resource_name": "Nucleo"
}
get/.well-known/oauth-protected-resource/{resource}

Get metadata for a resource path

Path-suffixed variant some clients request (e.g. /.well-known/oauth-protected-resource/mcp). Same document as the root variant.

GET https://mcp.nucleoplatform.com/.well-known/oauth-protected-resource/{resource}
Authentication: None — public endpoint

Path parameters

  • resourcestringrequired
    Example: mcp

Responses

  • 200Metadata.
    • resourcestring (uri)required
    • authorization_serversarray of string (uri)required
    • bearer_methods_supportedarray of string
      One ofheader
    • scopes_supportedarray of string
    • resource_namestring
Request
curl -X GET https://mcp.nucleoplatform.com/.well-known/oauth-protected-resource/mcp \
  -H 'Accept: application/json'
Response
{
  "resource": "https://shop.acme.example",
  "authorization_servers": [
    "https://shop.acme.example"
  ],
  "bearer_methods_supported": [
    "header"
  ],
  "scopes_supported": [
    "string"
  ],
  "resource_name": "string"
}

MCP

The MCP endpoint. One JSON-RPC 2.0 request per HTTP POST, one JSON response.

Methods: initialize, ping, tools/list, tools/call. Notifications (notifications/*, no id) are accepted with 202. Anything else → JSON-RPC error -32601. Not supported in this version: server-initiated streams (GET → 405), SSE responses, JSON-RPC batches, resources, prompts, sampling. The server is stateless: no Mcp-Session-Id.

Active company. Every module tool runs inside one company. At initialize the connector picks it in this order: your only company → the company you chose earlier with nucleo_switch_company → the first company. The initialize result's instructions start with ACTIVE COMPANY: "<name>" and the modules available there. Switching company is saved for you in Nucleo and applies to every AI client you connect.

Tool names carry the module prefix: brain_, catalog_, commerce_, intelligence_; the two connector tools start with nucleo_. A module's tools appear only if the company has the module, the company has not switched it off for AI clients, it is set up, and you have access to it. Definitions are cached for 60 seconds per person, company and module.

Annotations. Every tool carries the MCP annotations its module declares, passed through unchanged: readOnlyHint (it only reads), destructiveHint (a write that cannot be reversed automatically, such as merging duplicates in Brain), idempotentHint (true for reads) and openWorldHint (it reaches people outside Nucleo, such as sending an email or a Slack message). A hint the module leaves out is derived from whether the tool reads or writes, and a write tool is never presented as read-only. In the tool tables below, Access shows them: read, write, write, destructive, write, open world.

Errors.

  • Tool-level problems come back as a normal result with isError: true and a readable text: no permission (You do not have permission ... for this action.), invalid arguments, module not available in the company (with a hint to switch company), module unreachable or failing (Nucleo <Module> is not reachable right now (request <id>) — never internal details).
  • JSON-RPC errors: -32700 parse error (HTTP 400), -32601 method not found, -32602 unknown tool, -32603 internal error, -32000 module rate-limited (... busy, retry in N seconds).

Limits. Request body up to 2 MB. Module calls time out after 30 seconds. Modules rate-limit each person to 120 tool calls and 120 tool lists per minute (Catalog, Commerce, Intelligence). Token validation is cached for up to 60 seconds, but a token revoked in Nucleo (sign-out, disconnect, refresh) is refused immediately.

Privacy. Nucleo records which client you used, which tool, outcome and duration for the AI clients overview — never arguments or results.

get/

Server stream (not supported)

Server-initiated SSE streams are not offered. Always 405 with Allow: POST.

GET https://mcp.nucleoplatform.com/
Authentication: None — public endpoint

Responses

  • 405Only POST is supported.
    Headers
    • Allow
    • errorstring
    • messagestring
Request
curl -X GET https://mcp.nucleoplatform.com/
Response
{
  "error": "method_not_allowed",
  "message": "Use POST with a JSON-RPC 2.0 body."
}
post/

Send an MCP JSON-RPC request

The MCP endpoint (Streamable HTTP, POST only). Send Content-Type: application/json and Authorization: Bearer <access token>. The response is always a single application/json JSON-RPC message (202 with no body for notifications).

A missing, expired or revoked token gets 401 with WWW-Authenticate: Bearer realm="Nucleo", resource_metadata="https://mcp.nucleoplatform.com/.well-known/oauth-protected-resource": clients start the OAuth flow from there.

tools/call of a module tool is forwarded to the module with your token, the active company and your language; the module's CallToolResult (content, structuredContent, isError) is passed through unchanged.

POST https://mcp.nucleoplatform.com/
Authentication: OAuth 2.0 access token

Request bodyapplication/json

  • jsonrpc"2.0"required
  • idstring | integer

    Omit for notifications.

  • methodstringrequired
    One ofinitializepingtools/listtools/callnotifications/initializednotifications/cancelled
  • paramsobject

    initialize: protocolVersion, capabilities, clientInfo {name, version}. tools/call: name (prefixed tool name) and arguments (object matching the tool's inputSchema).

Responses

  • 200JSON-RPC response (result or error).
    • jsonrpc"2.0"required
    • idstring | integer | nullrequired
    • resultobject

      initialize → InitializeResult; tools/list → {tools: Tool[]}; tools/call → CallToolResult; ping → {}.

    • errorobject
      Child attributes
      • codeinteger
        One of-32700-32601-32602-32603-32000
      • messagestring
  • 202Notification accepted (no body).
  • 400Body is not a JSON-RPC 2.0 request (also returned for batches).
    • jsonrpc"2.0"required
    • idstring | integer | nullrequired
    • resultobject

      initialize → InitializeResult; tools/list → {tools: Tool[]}; tools/call → CallToolResult; ping → {}.

    • errorobject
      Child attributes
      • codeinteger
        One of-32700-32601-32602-32603-32000
      • messagestring
  • 401Missing, invalid, expired or revoked token (or Nucleo Core temporarily unreachable).
    Headers
    • WWW-Authenticate
    • errorstring
    • messagestring
  • 413Request body larger than 2 MB.
Request
curl -X POST https://mcp.nucleoplatform.com/ \
  -H "Authorization: Bearer $NUCLEO_ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {},
    "clientInfo": {
      "name": "acme-agent",
      "version": "1.4.0"
    }
  }
}'
Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": {
        "listChanged": false
      }
    },
    "serverInfo": {
      "name": "nucleo",
      "title": "Nucleo",
      "version": "2.0.0"
    },
    "instructions": "ACTIVE COMPANY: \"Acme Apparel\" (the only company of the user). Modules available here: catalog, commerce. Nucleo is the platform of the signed-in person: tools are grouped by module through their prefix (brain_ = CRM, inbox, knowledge, documents, playbooks; catalog_ = products and assets; commerce_ = tickets, stores, orders; intelligence_ = KPIs and reports). Every tool runs inside the active company with the person's own permissions. Before any write tool, summarise what will change and ask for confirmation; tools marked destructive (destructiveHint) cannot be undone, so say so explicitly. Answer in the user's language (English)."
  }
}
get/mcp

Server stream on alias (not supported)

Always 405 with Allow: POST.

GET https://mcp.nucleoplatform.com/mcp
Authentication: None — public endpoint

Responses

  • 405Only POST is supported.
    Headers
    • Allow
    • errorstring
    • messagestring
Request
curl -X GET https://mcp.nucleoplatform.com/mcp
Response
{
  "error": "method_not_allowed",
  "message": "Use POST with a JSON-RPC 2.0 body."
}
post/mcp

Send an MCP request (alias)

Same as POST /, for clients that expect an /mcp path.

POST https://mcp.nucleoplatform.com/mcp
Authentication: OAuth 2.0 access token

Request bodyapplication/json

  • jsonrpc"2.0"required
  • idstring | integer

    Omit for notifications.

  • methodstringrequired
    One ofinitializepingtools/listtools/callnotifications/initializednotifications/cancelled
  • paramsobject

    initialize: protocolVersion, capabilities, clientInfo {name, version}. tools/call: name (prefixed tool name) and arguments (object matching the tool's inputSchema).

Responses

  • 200JSON-RPC response.
    • jsonrpc"2.0"required
    • idstring | integer | nullrequired
    • resultobject

      initialize → InitializeResult; tools/list → {tools: Tool[]}; tools/call → CallToolResult; ping → {}.

    • errorobject
      Child attributes
      • codeinteger
        One of-32700-32601-32602-32603-32000
      • messagestring
  • 202Notification accepted.
  • 400Not a JSON-RPC 2.0 request.
  • 401Missing, invalid, expired or revoked token (or Nucleo Core temporarily unreachable).
    Headers
    • WWW-Authenticate
    • errorstring
    • messagestring
Request
curl -X POST https://mcp.nucleoplatform.com/mcp \
  -H "Authorization: Bearer $NUCLEO_ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "jsonrpc": "2.0",
  "id": "string",
  "method": "initialize",
  "params": {}
}'
Response
{
  "jsonrpc": "2.0",
  "id": "string",
  "result": {},
  "error": {
    "code": -32700,
    "message": "string"
  }
}