Skip to content

Start building

Jump toMCP servers
All endpoints

MCP servers

Remote MCP servers: connect, sign in, approve tools, try them and read the call log.

get/v1/mcp_servers

List MCP servers

Needs connection.view

Newest first. Sorts by created_at, updated_at, last_used_at and name; q searches names, addresses and descriptions, or finds a pasted mcp_… ID. Filters, each repeatable: health as people see it (healthy, unhealthy, revoked, pending, sign_in_pending, paused), auth_type, status, review (waiting: tools wait for a person; clear), created_by, updated_by. Rows carry no tools (null) unless with_tools=true, which the agent and workflow editors ask for to offer each server's approved tools.

Query parameters

  • workspace_idstring
  • healthstring[]
  • auth_typestring[]
  • statusstring[]
  • reviewstring[]
  • created_bystring[]
  • updated_bystring[]
  • with_toolsboolean
    Defaultfalse
  • limitinteger

    Rows per page, 1 to 200.

    Default50at least 1at most 200
  • cursorstring
  • qstring

    Search: rows whose name (or the list's other searchable text) contains this, any case.

    at most 200 characters
  • orderstring

    Sort field; a leading - sorts down. Each list names the fields it sorts by.

    at most 64 charactersmatches ^-?[a-z_]+$
  • includestring[]

    total_count (counted up to 10,000) and facets (a count per filter value).

    One oftotal_countfacets
  • created_afterstring

    Only rows created at or after this time (RFC 3339).

    date-time
  • created_beforestring

    Only rows created at or before this time (RFC 3339).

    date-time
  • updated_afterstring

    Only rows last changed at or after this time (RFC 3339).

    date-time
  • updated_beforestring

    Only rows last changed at or before this time (RFC 3339).

    date-time

Response200

  • objectstring
    list
  • dataMcpServer[]
    38 fields
    • idstring
    • objectstring
      mcp_server
    • auth_typestring
      One ofnonebearerheadersoauth2
    • auto_approvestring
      One ofnoneread_onlyall
    • baaMcpBaa or null
      2 fields
      • attested_atstring or null
      • referencestring or null
    • call_timeout_sinteger
    • catalog_idstring or null
    • created_atstring or null
    • data_classstring
      One ofpublicinternalpiisensitivephi
    • descriptionstring or null
    • discovery_errorstring or null
    • header_namesstring[]
    • healthstring
      One ofhealthydegradedunhealthyrevokeddisabled
    • health_changed_atstring or null
    • health_reasonstring or null
    • hoststring
    • last_discovered_atstring or null
    • logoMcpLogo or null

      upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

      3 fields
      • markstring or null
      • sourcestring or null
        One ofuploadmarkserver
      • urlstring or null
    • logo_removedboolean
    • max_output_bytesinteger
    • namestring
    • oauthMcpOAuthInfo or null
      5 fields
      • clientstring or null
        One ofdynamicown
      • client_idstring or null
      • issuerstring or null
      • resourcestring or null
      • scopesstring[]
    • row_versioninteger
    • server_infoMcpServerInfo
      9 fields
      • capabilitiesstring[]
      • instructionsstring or null
      • namestring or null
      • promptsobject[]
      • protocol_versionstring or null
      • resourcesobject[]
      • titlestring or null
      • versionstring or null
      • website_urlstring or null
    • share_instructionsboolean
    • signed_in_untilstring or null
    • statusstring
      One ofpendingactivedisabled
    • tool_countsMcpToolCounts
      6 fields
      • approvedinteger
      • blockedinteger
      • changedinteger
      • pendinginteger
      • removedinteger
      • totalinteger
    • toolsMcpTool[] or null
      20 fields
      • annotationsobject or null

        Any JSON object.

      • approvalstring
        One ofneveralwayspolicy
      • approved_atstring or null
      • approved_bystring or null
      • auto_approvedboolean
      • changed_atstring or null
      • descriptionstring or null
      • first_seen_atstring or null
      • hashstring
      • input_schemaobject

        Any JSON object.

      • keystring
      • liveMcpToolLive or null

        The definition the server offers now, for a tool that changed since approval.

        6 fields
        • annotationsobject or null

          Any JSON object.

        • descriptionstring or null
        • hashstring or null
        • input_schemaobject

          Any JSON object.

        • output_schemaobject or null

          Any JSON object.

        • titlestring or null
      • namestring
      • output_schemaobject or null

        Any JSON object.

      • removed_atstring or null
      • side_effectsstring
        One ofreadwritedestructive
      • side_effects_sourcestring or null
        One ofserverdefaultperson
      • statsMcpToolStats or null
        5 fields
        • avg_msinteger or null
        • callsinteger
        • errorsinteger
        • last_atstring or null
        • last_errorstring or null
      • statusstring
        One ofpendingapprovedblockedchangedremoved
      • titlestring or null
    • tools_truncatedboolean
    • transportstring
      One ofautostreamable_httpsse
    • transport_detectedstring or null
      One ofstreamable_httpsse
    • updated_atstring or null
    • urlstring
    • usageMcpUsage
      3 fields
      • callsinteger
      • errorsinteger
      • last_used_atstring or null
    • workspace_idstring
    • created_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
    • updated_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
  • has_moreboolean
  • next_cursorstring or null
  • facetsmap<string, map<string, integer>> or null
  • peoplemap<string, ActorRef> or null
    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • total_countinteger or null
  • total_count_exactboolean or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl "https://api.mydeepagents.com/v1/mcp_servers?limit=20" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "list",
  "data": [
    {
      "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
      "object": "mcp_server",
      "auth_type": "none",
      "auto_approve": "none",
      "baa": {
        "attested_at": "2026-11-10T09:30:00.000Z",
        "reference": "reference"
      },
      "call_timeout_s": 60,
      "catalog_id": "linear",
      "created_at": "2026-11-10T09:30:00.000Z",
      "created_by": {
        "kind": "user",
        "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "name": "Ada Lovelace",
        "email": "ada@example.com"
      },
      "data_class": "public",
      "description": "Reads new support email and drafts a reply.",
      "discovery_error": null,
      "header_names": [
        "X-Api-Key"
      ],
      "health": "healthy",
      "health_changed_at": "2026-11-10T09:30:00.000Z",
      "health_reason": null,
      "host": "mcp.example.com",
      "last_discovered_at": "2026-11-10T09:30:00.000Z",
      "logo": {
        "mark": "mark",
        "source": "upload",
        "url": "https://mcp.example.com/mcp"
      },
      "logo_removed": true,
      "max_output_bytes": 1048576,
      "name": "Support triage",
      "oauth": {
        "client": "dynamic",
        "client_id": "client id",
        "issuer": "issuer",
        "resource": "resource",
        "scopes": [
          "agent.view",
          "agent.run",
          "run.view"
        ]
      },
      "row_version": 4,
      "server_info": {
        "capabilities": [
          "tools"
        ],
        "instructions": "instructions",
        "name": "Support triage",
        "prompts": [
          {}
        ],
        "protocol_version": "2025-11-25",
        "resources": [
          {}
        ],
        "title": "Support triage",
        "version": "version",
        "website_url": "https://example.com"
      },
      "share_instructions": true,
      "signed_in_until": "2026-11-10T09:30:00.000Z",
      "status": "pending",
      "tool_counts": {
        "approved": 2,
        "blocked": 2,
        "changed": 2,
        "pending": 2,
        "removed": 2,
        "total": 2
      },
      "tools": [
        {
          "annotations": {},
          "approval": "never",
          "approved_at": "2026-11-10T09:30:00.000Z",
          "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
          "auto_approved": true,
          "changed_at": "2026-11-10T09:30:00.000Z",
          "description": "Reads new support email and drafts a reply.",
          "first_seen_at": "2026-11-10T09:30:00.000Z",
          "hash": "hash",
          "input_schema": {},
          "key": "key",
          "live": {},
          "name": "Support triage",
          "output_schema": {},
          "removed_at": "2026-11-10T09:30:00.000Z",
          "side_effects": "read",
          "side_effects_source": "server",
          "stats": {},
          "status": "pending",
          "title": "Support triage"
        }
      ],
      "tools_truncated": true,
      "transport": "auto",
      "transport_detected": "streamable_http",
      "updated_at": "2026-11-10T09:30:00.000Z",
      "updated_by": {
        "kind": "user",
        "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "name": "Ada Lovelace",
        "email": "ada@example.com"
      },
      "url": "https://mcp.example.com/mcp",
      "usage": {
        "calls": 2,
        "errors": 2,
        "last_used_at": "2026-11-10T09:30:00.000Z"
      },
      "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "total_count": 1
}
post/v1/mcp_servers

Create MCP server

Needs connection.manage

Adds a server. An open server's tools are read at once; a token or custom headers are tested by reading the tools first (refused → 422, nothing kept); a sign-in server stays pending until oauth/start and the callback finish.

Request bodyMcpServerCreate

  • auth_typestringRequired
    One ofnonebearerheadersoauth2
  • namestringRequired
    at least 1 charactersat most 200 characters
  • urlstringRequired
    at least 8 charactersat most 2048 characters
  • workspace_idstringRequired
  • approvestring
    One ofnoneread_onlyallDefault"none"
  • auto_approvestring
    One ofnoneread_onlyallDefault"none"
  • call_timeout_sinteger
    Default60at least 1at most 300
  • catalog_idstring or null
    matches ^[a-z][a-z0-9_-]{1,40}$
  • data_classstring
    One ofpublicinternalpiisensitivephiDefault"pii"
  • descriptionstring or null
    at most 2000 characters
  • headersmap<string, string> or null
  • max_output_bytesinteger
    Default1048576at least 1024at most 5242880
  • tokenstring or null
    at least 1 charactersat most 8192 characters
  • transportstring
    One ofautostreamable_httpsseDefault"auto"

Response201

  • idstring
  • objectstring
    mcp_server
  • auth_typestring
    One ofnonebearerheadersoauth2
  • auto_approvestring
    One ofnoneread_onlyall
  • baaMcpBaa or null
    2 fields
    • attested_atstring or null
    • referencestring or null
  • call_timeout_sinteger
  • catalog_idstring or null
  • created_atstring or null
  • data_classstring
    One ofpublicinternalpiisensitivephi
  • descriptionstring or null
  • discovery_errorstring or null
  • header_namesstring[]
  • healthstring
    One ofhealthydegradedunhealthyrevokeddisabled
  • health_changed_atstring or null
  • health_reasonstring or null
  • hoststring
  • last_discovered_atstring or null
  • logoMcpLogo or null

    upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

    3 fields
    • markstring or null
    • sourcestring or null
      One ofuploadmarkserver
    • urlstring or null
  • logo_removedboolean
  • max_output_bytesinteger
  • namestring
  • oauthMcpOAuthInfo or null
    5 fields
    • clientstring or null
      One ofdynamicown
    • client_idstring or null
    • issuerstring or null
    • resourcestring or null
    • scopesstring[]
  • row_versioninteger
  • server_infoMcpServerInfo
    9 fields
    • capabilitiesstring[]
    • instructionsstring or null
    • namestring or null
    • promptsobject[]
    • protocol_versionstring or null
    • resourcesobject[]
    • titlestring or null
    • versionstring or null
    • website_urlstring or null
  • setupMcpSetup or null

    What happened when the server was first read (or a token tested).

    4 fields
    • codestring or null
    • countsmap<string, integer>
    • messagestring or null
    • outcomestring
      One ofokauth_requiredrefusedfailed
  • share_instructionsboolean
  • signed_in_untilstring or null
  • statusstring
    One ofpendingactivedisabled
  • tool_countsMcpToolCounts
    6 fields
    • approvedinteger
    • blockedinteger
    • changedinteger
    • pendinginteger
    • removedinteger
    • totalinteger
  • toolsMcpTool[] or null
    20 fields
    • annotationsobject or null

      Any JSON object.

    • approvalstring
      One ofneveralwayspolicy
    • approved_atstring or null
    • approved_bystring or null
    • auto_approvedboolean
    • changed_atstring or null
    • descriptionstring or null
    • first_seen_atstring or null
    • hashstring
    • input_schemaobject

      Any JSON object.

    • keystring
    • liveMcpToolLive or null

      The definition the server offers now, for a tool that changed since approval.

      6 fields
      • annotationsobject or null

        Any JSON object.

      • descriptionstring or null
      • hashstring or null
      • input_schemaobject

        Any JSON object.

      • output_schemaobject or null

        Any JSON object.

      • titlestring or null
    • namestring
    • output_schemaobject or null

      Any JSON object.

    • removed_atstring or null
    • side_effectsstring
      One ofreadwritedestructive
    • side_effects_sourcestring or null
      One ofserverdefaultperson
    • statsMcpToolStats or null
      5 fields
      • avg_msinteger or null
      • callsinteger
      • errorsinteger
      • last_atstring or null
      • last_errorstring or null
    • statusstring
      One ofpendingapprovedblockedchangedremoved
    • titlestring or null
  • tools_truncatedboolean
  • transportstring
    One ofautostreamable_httpsse
  • transport_detectedstring or null
    One ofstreamable_httpsse
  • updated_atstring or null
  • urlstring
  • usageMcpUsage
    3 fields
    • callsinteger
    • errorsinteger
    • last_used_atstring or null
  • workspace_idstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 201Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "auth_type": "none",
    "name": "Support triage",
    "url": "https://mcp.example.com/mcp",
    "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
  }'
Response · 201
JSON
{
  "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
  "object": "mcp_server",
  "auth_type": "none",
  "auto_approve": "none",
  "baa": {
    "attested_at": "2026-11-10T09:30:00.000Z",
    "reference": "reference"
  },
  "call_timeout_s": 60,
  "catalog_id": "linear",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "data_class": "public",
  "description": "Reads new support email and drafts a reply.",
  "discovery_error": null,
  "header_names": [
    "X-Api-Key"
  ],
  "health": "healthy",
  "health_changed_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "host": "mcp.example.com",
  "last_discovered_at": "2026-11-10T09:30:00.000Z",
  "logo": {
    "mark": "mark",
    "source": "upload",
    "url": "https://mcp.example.com/mcp"
  },
  "logo_removed": true,
  "max_output_bytes": 1048576,
  "name": "Support triage",
  "oauth": {
    "client": "dynamic",
    "client_id": "client id",
    "issuer": "issuer",
    "resource": "resource",
    "scopes": [
      "agent.view",
      "agent.run",
      "run.view"
    ]
  },
  "row_version": 4,
  "server_info": {
    "capabilities": [
      "tools"
    ],
    "instructions": "instructions",
    "name": "Support triage",
    "prompts": [
      {}
    ],
    "protocol_version": "2025-11-25",
    "resources": [
      {}
    ],
    "title": "Support triage",
    "version": "version",
    "website_url": "https://example.com"
  },
  "setup": {
    "code": "code",
    "counts": {
      "key": 2
    },
    "message": "Summarise today's open tickets.",
    "outcome": "ok"
  },
  "share_instructions": true,
  "signed_in_until": "2026-11-10T09:30:00.000Z",
  "status": "pending",
  "tool_counts": {
    "approved": 2,
    "blocked": 2,
    "changed": 2,
    "pending": 2,
    "removed": 2,
    "total": 2
  },
  "tools": [
    {
      "annotations": {},
      "approval": "never",
      "approved_at": "2026-11-10T09:30:00.000Z",
      "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "auto_approved": true,
      "changed_at": "2026-11-10T09:30:00.000Z",
      "description": "Reads new support email and drafts a reply.",
      "first_seen_at": "2026-11-10T09:30:00.000Z",
      "hash": "hash",
      "input_schema": {},
      "key": "key",
      "live": {
        "annotations": {},
        "description": "Reads new support email and drafts a reply.",
        "hash": "hash",
        "input_schema": {},
        "output_schema": {},
        "title": "Support triage"
      },
      "name": "Support triage",
      "output_schema": {},
      "removed_at": "2026-11-10T09:30:00.000Z",
      "side_effects": "read",
      "side_effects_source": "server",
      "stats": {
        "avg_ms": 840,
        "calls": 2,
        "errors": 2,
        "last_at": "2026-11-10T09:30:00.000Z",
        "last_error": null
      },
      "status": "pending",
      "title": "Support triage"
    }
  ],
  "tools_truncated": true,
  "transport": "auto",
  "transport_detected": "streamable_http",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "url": "https://mcp.example.com/mcp",
  "usage": {
    "calls": 2,
    "errors": 2,
    "last_used_at": "2026-11-10T09:30:00.000Z"
  },
  "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
}
get/v1/mcp_servers/catalog

List MCP catalog

Needs connection.view

Popular remote MCP servers, checked when this release was built. A starting point, not a trust list: tools from any server still wait for a person.

Response200

  • objectstring
    list
  • dataMcpCatalogEntry[]
    18 fields
    • idstring
    • objectstring
      mcp_catalog_entry
    • alsostring[]
      One ofnoneoauth2bearerheaders
    • authstring
      One ofnoneoauth2bearerheaders
    • categorystring
      One ofaianalyticsautomationcloudcommercecommunicationcrmdatadesigndeveloperdocsfinancehealthhrlegalmarketingobservabilitypaymentsproductivityprojectsearchsecuritysupporttravel
    • descriptionstring
    • featuredboolean
    • headerstring or null
    • hintstring or null
    • markstring or null
    • namestring
    • publisherstring
    • urlstring
    • websitestring
    • checkedstring or null
    • docsstring or null
    • fieldsMcpCatalogField[]
      3 fields
      • examplestring
      • labelstring
      • namestring
    • transportstring
      One ofautostreamable_httpsseDefault"auto"
  • has_moreboolean
  • next_cursorstring or null
  • facetsmap<string, map<string, integer>> or null
  • peoplemap<string, ActorRef> or null
    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • total_countinteger or null
  • total_count_exactboolean or null

Status codes

  • 200Successful Response
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl "https://api.mydeepagents.com/v1/mcp_servers/catalog" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "list",
  "data": [
    {
      "id": "id",
      "object": "mcp_catalog_entry",
      "also": [
        "none"
      ],
      "auth": "none",
      "category": "ai",
      "checked": "checked",
      "description": "Reads new support email and drafts a reply.",
      "docs": "docs",
      "featured": true,
      "fields": [
        {
          "example": "example",
          "label": "label",
          "name": "Support triage"
        }
      ],
      "header": "header",
      "hint": "hint",
      "mark": "mark",
      "name": "Support triage",
      "publisher": "publisher",
      "transport": "auto",
      "url": "https://mcp.example.com/mcp",
      "website": "https://example.com"
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "total_count": 1
}
post/v1/mcp_servers/probe

Probe MCP server

Needs connection.manage

Connects without credentials and says what it found: the transport, the server's name and its tools, or — for a server that wants a sign-in or a token — how to get in. Nothing is stored.

Request bodyMcpProbeRequest

  • urlstringRequired
    at least 8 charactersat most 2048 characters
  • transportstring
    One ofautostreamable_httpsseDefault"auto"

Response200

  • objectstring
    mcp_probe
  • authMcpAuthHint or null
    4 fields
    • typestring
      One ofoauth2token
    • dcrboolean or null
    • issuerstring or null
    • scopesstring[]
  • codestring or null
  • locationstring or null
  • messagestring or null
  • outcomestring
    One ofokauth_requiredfailed
  • protocol_versionstring or null
  • server_infoobject

    Any JSON object.

  • toolsMcpToolPreview[]
    5 fields
    • descriptionstring
    • namestring
    • side_effectsstring
      One ofreadwritedestructive
    • side_effects_sourcestring
      One ofserverdefaultperson
    • titlestring or null
  • tools_truncatedboolean
  • transportstring or null
    One ofstreamable_httpsse

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/probe" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transport": "auto",
    "url": "https://mcp.example.com/mcp"
  }'
Response · 200
JSON
{
  "object": "mcp_probe",
  "auth": {
    "dcr": true,
    "issuer": "issuer",
    "scopes": [
      "agent.view",
      "agent.run",
      "run.view"
    ],
    "type": "oauth2"
  },
  "code": "code",
  "location": null,
  "message": "Summarise today's open tickets.",
  "outcome": "ok",
  "protocol_version": "2025-11-25",
  "server_info": {},
  "tools": [
    {
      "description": "Reads new support email and drafts a reply.",
      "name": "Support triage",
      "side_effects": "read",
      "side_effects_source": "server",
      "title": "Support triage"
    }
  ],
  "tools_truncated": true,
  "transport": "streamable_http"
}
get/v1/mcp_servers/{mcp_server_id}

Get MCP server

Needs connection.view

Path parameters

  • mcp_server_idstringRequired

Response200

  • idstring
  • objectstring
    mcp_server
  • auth_typestring
    One ofnonebearerheadersoauth2
  • auto_approvestring
    One ofnoneread_onlyall
  • baaMcpBaa or null
    2 fields
    • attested_atstring or null
    • referencestring or null
  • call_timeout_sinteger
  • catalog_idstring or null
  • created_atstring or null
  • data_classstring
    One ofpublicinternalpiisensitivephi
  • descriptionstring or null
  • discovery_errorstring or null
  • header_namesstring[]
  • healthstring
    One ofhealthydegradedunhealthyrevokeddisabled
  • health_changed_atstring or null
  • health_reasonstring or null
  • hoststring
  • last_discovered_atstring or null
  • logoMcpLogo or null

    upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

    3 fields
    • markstring or null
    • sourcestring or null
      One ofuploadmarkserver
    • urlstring or null
  • logo_removedboolean
  • max_output_bytesinteger
  • namestring
  • oauthMcpOAuthInfo or null
    5 fields
    • clientstring or null
      One ofdynamicown
    • client_idstring or null
    • issuerstring or null
    • resourcestring or null
    • scopesstring[]
  • row_versioninteger
  • server_infoMcpServerInfo
    9 fields
    • capabilitiesstring[]
    • instructionsstring or null
    • namestring or null
    • promptsobject[]
    • protocol_versionstring or null
    • resourcesobject[]
    • titlestring or null
    • versionstring or null
    • website_urlstring or null
  • share_instructionsboolean
  • signed_in_untilstring or null
  • statusstring
    One ofpendingactivedisabled
  • tool_countsMcpToolCounts
    6 fields
    • approvedinteger
    • blockedinteger
    • changedinteger
    • pendinginteger
    • removedinteger
    • totalinteger
  • toolsMcpTool[] or null
    20 fields
    • annotationsobject or null

      Any JSON object.

    • approvalstring
      One ofneveralwayspolicy
    • approved_atstring or null
    • approved_bystring or null
    • auto_approvedboolean
    • changed_atstring or null
    • descriptionstring or null
    • first_seen_atstring or null
    • hashstring
    • input_schemaobject

      Any JSON object.

    • keystring
    • liveMcpToolLive or null

      The definition the server offers now, for a tool that changed since approval.

      6 fields
      • annotationsobject or null

        Any JSON object.

      • descriptionstring or null
      • hashstring or null
      • input_schemaobject

        Any JSON object.

      • output_schemaobject or null

        Any JSON object.

      • titlestring or null
    • namestring
    • output_schemaobject or null

      Any JSON object.

    • removed_atstring or null
    • side_effectsstring
      One ofreadwritedestructive
    • side_effects_sourcestring or null
      One ofserverdefaultperson
    • statsMcpToolStats or null
      5 fields
      • avg_msinteger or null
      • callsinteger
      • errorsinteger
      • last_atstring or null
      • last_errorstring or null
    • statusstring
      One ofpendingapprovedblockedchangedremoved
    • titlestring or null
  • tools_truncatedboolean
  • transportstring
    One ofautostreamable_httpsse
  • transport_detectedstring or null
    One ofstreamable_httpsse
  • updated_atstring or null
  • urlstring
  • usageMcpUsage
    3 fields
    • callsinteger
    • errorsinteger
    • last_used_atstring or null
  • workspace_idstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
  "object": "mcp_server",
  "auth_type": "none",
  "auto_approve": "none",
  "baa": {
    "attested_at": "2026-11-10T09:30:00.000Z",
    "reference": "reference"
  },
  "call_timeout_s": 60,
  "catalog_id": "linear",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "data_class": "public",
  "description": "Reads new support email and drafts a reply.",
  "discovery_error": null,
  "header_names": [
    "X-Api-Key"
  ],
  "health": "healthy",
  "health_changed_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "host": "mcp.example.com",
  "last_discovered_at": "2026-11-10T09:30:00.000Z",
  "logo": {
    "mark": "mark",
    "source": "upload",
    "url": "https://mcp.example.com/mcp"
  },
  "logo_removed": true,
  "max_output_bytes": 1048576,
  "name": "Support triage",
  "oauth": {
    "client": "dynamic",
    "client_id": "client id",
    "issuer": "issuer",
    "resource": "resource",
    "scopes": [
      "agent.view",
      "agent.run",
      "run.view"
    ]
  },
  "row_version": 4,
  "server_info": {
    "capabilities": [
      "tools"
    ],
    "instructions": "instructions",
    "name": "Support triage",
    "prompts": [
      {}
    ],
    "protocol_version": "2025-11-25",
    "resources": [
      {}
    ],
    "title": "Support triage",
    "version": "version",
    "website_url": "https://example.com"
  },
  "share_instructions": true,
  "signed_in_until": "2026-11-10T09:30:00.000Z",
  "status": "pending",
  "tool_counts": {
    "approved": 2,
    "blocked": 2,
    "changed": 2,
    "pending": 2,
    "removed": 2,
    "total": 2
  },
  "tools": [
    {
      "annotations": {},
      "approval": "never",
      "approved_at": "2026-11-10T09:30:00.000Z",
      "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "auto_approved": true,
      "changed_at": "2026-11-10T09:30:00.000Z",
      "description": "Reads new support email and drafts a reply.",
      "first_seen_at": "2026-11-10T09:30:00.000Z",
      "hash": "hash",
      "input_schema": {},
      "key": "key",
      "live": {
        "annotations": {},
        "description": "Reads new support email and drafts a reply.",
        "hash": "hash",
        "input_schema": {},
        "output_schema": {},
        "title": "Support triage"
      },
      "name": "Support triage",
      "output_schema": {},
      "removed_at": "2026-11-10T09:30:00.000Z",
      "side_effects": "read",
      "side_effects_source": "server",
      "stats": {
        "avg_ms": 840,
        "calls": 2,
        "errors": 2,
        "last_at": "2026-11-10T09:30:00.000Z",
        "last_error": null
      },
      "status": "pending",
      "title": "Support triage"
    }
  ],
  "tools_truncated": true,
  "transport": "auto",
  "transport_detected": "streamable_http",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "url": "https://mcp.example.com/mcp",
  "usage": {
    "calls": 2,
    "errors": 2,
    "last_used_at": "2026-11-10T09:30:00.000Z"
  },
  "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
}
patch/v1/mcp_servers/{mcp_server_id}

Update MCP server

Needs connection.manage

Path parameters

  • mcp_server_idstringRequired

Request bodyMcpServerPatch

  • auto_approvestring or null
    One ofnoneread_onlyall
  • baa_referencestring or null
    at most 200 characters
  • call_timeout_sinteger or null
    at least 1at most 300
  • data_classstring or null
    One ofpublicinternalpiisensitivephi
  • descriptionstring or null
    at most 2000 characters
  • max_output_bytesinteger or null
    at least 1024at most 5242880
  • namestring or null
    at least 1 charactersat most 200 characters
  • row_versioninteger or null
  • share_instructionsboolean or null
  • statusstring or null
    One ofactivedisabled
  • transportstring or null
    One ofautostreamable_httpsse

Response200

  • idstring
  • objectstring
    mcp_server
  • auth_typestring
    One ofnonebearerheadersoauth2
  • auto_approvestring
    One ofnoneread_onlyall
  • baaMcpBaa or null
    2 fields
    • attested_atstring or null
    • referencestring or null
  • call_timeout_sinteger
  • catalog_idstring or null
  • created_atstring or null
  • data_classstring
    One ofpublicinternalpiisensitivephi
  • descriptionstring or null
  • discovery_errorstring or null
  • header_namesstring[]
  • healthstring
    One ofhealthydegradedunhealthyrevokeddisabled
  • health_changed_atstring or null
  • health_reasonstring or null
  • hoststring
  • last_discovered_atstring or null
  • logoMcpLogo or null

    upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

    3 fields
    • markstring or null
    • sourcestring or null
      One ofuploadmarkserver
    • urlstring or null
  • logo_removedboolean
  • max_output_bytesinteger
  • namestring
  • oauthMcpOAuthInfo or null
    5 fields
    • clientstring or null
      One ofdynamicown
    • client_idstring or null
    • issuerstring or null
    • resourcestring or null
    • scopesstring[]
  • row_versioninteger
  • server_infoMcpServerInfo
    9 fields
    • capabilitiesstring[]
    • instructionsstring or null
    • namestring or null
    • promptsobject[]
    • protocol_versionstring or null
    • resourcesobject[]
    • titlestring or null
    • versionstring or null
    • website_urlstring or null
  • share_instructionsboolean
  • signed_in_untilstring or null
  • statusstring
    One ofpendingactivedisabled
  • tool_countsMcpToolCounts
    6 fields
    • approvedinteger
    • blockedinteger
    • changedinteger
    • pendinginteger
    • removedinteger
    • totalinteger
  • toolsMcpTool[] or null
    20 fields
    • annotationsobject or null

      Any JSON object.

    • approvalstring
      One ofneveralwayspolicy
    • approved_atstring or null
    • approved_bystring or null
    • auto_approvedboolean
    • changed_atstring or null
    • descriptionstring or null
    • first_seen_atstring or null
    • hashstring
    • input_schemaobject

      Any JSON object.

    • keystring
    • liveMcpToolLive or null

      The definition the server offers now, for a tool that changed since approval.

      6 fields
      • annotationsobject or null

        Any JSON object.

      • descriptionstring or null
      • hashstring or null
      • input_schemaobject

        Any JSON object.

      • output_schemaobject or null

        Any JSON object.

      • titlestring or null
    • namestring
    • output_schemaobject or null

      Any JSON object.

    • removed_atstring or null
    • side_effectsstring
      One ofreadwritedestructive
    • side_effects_sourcestring or null
      One ofserverdefaultperson
    • statsMcpToolStats or null
      5 fields
      • avg_msinteger or null
      • callsinteger
      • errorsinteger
      • last_atstring or null
      • last_errorstring or null
    • statusstring
      One ofpendingapprovedblockedchangedremoved
    • titlestring or null
  • tools_truncatedboolean
  • transportstring
    One ofautostreamable_httpsse
  • transport_detectedstring or null
    One ofstreamable_httpsse
  • updated_atstring or null
  • urlstring
  • usageMcpUsage
    3 fields
    • callsinteger
    • errorsinteger
    • last_used_atstring or null
  • workspace_idstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X PATCH "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Response · 200
JSON
{
  "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
  "object": "mcp_server",
  "auth_type": "none",
  "auto_approve": "none",
  "baa": {
    "attested_at": "2026-11-10T09:30:00.000Z",
    "reference": "reference"
  },
  "call_timeout_s": 60,
  "catalog_id": "linear",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "data_class": "public",
  "description": "Reads new support email and drafts a reply.",
  "discovery_error": null,
  "header_names": [
    "X-Api-Key"
  ],
  "health": "healthy",
  "health_changed_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "host": "mcp.example.com",
  "last_discovered_at": "2026-11-10T09:30:00.000Z",
  "logo": {
    "mark": "mark",
    "source": "upload",
    "url": "https://mcp.example.com/mcp"
  },
  "logo_removed": true,
  "max_output_bytes": 1048576,
  "name": "Support triage",
  "oauth": {
    "client": "dynamic",
    "client_id": "client id",
    "issuer": "issuer",
    "resource": "resource",
    "scopes": [
      "agent.view",
      "agent.run",
      "run.view"
    ]
  },
  "row_version": 4,
  "server_info": {
    "capabilities": [
      "tools"
    ],
    "instructions": "instructions",
    "name": "Support triage",
    "prompts": [
      {}
    ],
    "protocol_version": "2025-11-25",
    "resources": [
      {}
    ],
    "title": "Support triage",
    "version": "version",
    "website_url": "https://example.com"
  },
  "share_instructions": true,
  "signed_in_until": "2026-11-10T09:30:00.000Z",
  "status": "pending",
  "tool_counts": {
    "approved": 2,
    "blocked": 2,
    "changed": 2,
    "pending": 2,
    "removed": 2,
    "total": 2
  },
  "tools": [
    {
      "annotations": {},
      "approval": "never",
      "approved_at": "2026-11-10T09:30:00.000Z",
      "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "auto_approved": true,
      "changed_at": "2026-11-10T09:30:00.000Z",
      "description": "Reads new support email and drafts a reply.",
      "first_seen_at": "2026-11-10T09:30:00.000Z",
      "hash": "hash",
      "input_schema": {},
      "key": "key",
      "live": {
        "annotations": {},
        "description": "Reads new support email and drafts a reply.",
        "hash": "hash",
        "input_schema": {},
        "output_schema": {},
        "title": "Support triage"
      },
      "name": "Support triage",
      "output_schema": {},
      "removed_at": "2026-11-10T09:30:00.000Z",
      "side_effects": "read",
      "side_effects_source": "server",
      "stats": {
        "avg_ms": 840,
        "calls": 2,
        "errors": 2,
        "last_at": "2026-11-10T09:30:00.000Z",
        "last_error": null
      },
      "status": "pending",
      "title": "Support triage"
    }
  ],
  "tools_truncated": true,
  "transport": "auto",
  "transport_detected": "streamable_http",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "url": "https://mcp.example.com/mcp",
  "usage": {
    "calls": 2,
    "errors": 2,
    "last_used_at": "2026-11-10T09:30:00.000Z"
  },
  "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
}
delete/v1/mcp_servers/{mcp_server_id}

Delete MCP server

Needs connection.manage

Signs out at the server's sign-in server when it can (best effort), then the secret goes and the row goes to the trash. Agents and workflows bound to it lose the slot's tools.

Path parameters

  • mcp_server_idstringRequired

Response204

Answers 204 with no body.

Status codes

  • 204Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X DELETE "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd" \
  -H "Authorization: Bearer $MDA_API_KEY"
get/v1/mcp_servers/{mcp_server_id}/calls

List MCP calls

Needs connection.view

Newest first: one row per tool call — agent runs, workflow runs and people trying a tool — with the outcome and timing, never the arguments or the result; kept 30 days. daily counts calls per UTC day and outcome over the last days days. Page with cursor (next_cursor).

Path parameters

  • mcp_server_idstringRequired

Query parameters

  • limitinteger
    Default50at least 1at most 200
  • toolstring
    at most 200 characters
  • outcomestring
    One ofoktool_errorerror
  • cursorstring

    The last call's id of the page before.

    uuid
  • daysinteger
    Default14at least 1at most 30

Response200

  • objectstring
    mcp_call_log
  • dailyMcpCallDay[]
    5 fields
    • avg_msinteger or null
    • daystring
    • errorinteger
    • okinteger
    • tool_errorinteger
  • dataMcpCall[]
    9 fields
    • idstring
    • actorActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
    • created_atstring
    • duration_msinteger
    • error_codestring or null
    • outcomestring
      One ofoktool_errorerror
    • run_idstring or null
    • sourcestring
      One ofagentworkflowtry
    • toolstring
  • has_moreboolean
  • next_cursorstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/calls?limit=20" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "mcp_call_log",
  "daily": [
    {
      "avg_ms": 840,
      "day": "2026-11-10",
      "error": 2,
      "ok": 2,
      "tool_error": 2
    }
  ],
  "data": [
    {
      "id": "id",
      "actor": {
        "kind": "user",
        "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "name": "Ada Lovelace",
        "email": "ada@example.com"
      },
      "created_at": "2026-11-10T09:30:00.000Z",
      "duration_ms": 840,
      "error_code": null,
      "outcome": "ok",
      "run_id": "run_01jcr77659p6hws1zjqkthay73",
      "source": "agent",
      "tool": "tool"
    }
  ],
  "has_more": false,
  "next_cursor": null
}
post/v1/mcp_servers/{mcp_server_id}/oauth/complete

Complete MCP OAuth

Needs connection.manage

The code and state go to the connector worker in an intake envelope; the answer is the signed-in server with its tools, or 422 with a code from a fixed list.

Path parameters

  • mcp_server_idstringRequired

Request bodyMcpOAuthCompleteBody

  • codestringRequired
    at least 1 charactersat most 4096 characters
  • statestringRequired
    at least 1 charactersat most 200 characters
  • paramsmap<string, string>

Response200

  • idstring
  • objectstring
    mcp_server
  • auth_typestring
    One ofnonebearerheadersoauth2
  • auto_approvestring
    One ofnoneread_onlyall
  • baaMcpBaa or null
    2 fields
    • attested_atstring or null
    • referencestring or null
  • call_timeout_sinteger
  • catalog_idstring or null
  • created_atstring or null
  • data_classstring
    One ofpublicinternalpiisensitivephi
  • descriptionstring or null
  • discovery_errorstring or null
  • header_namesstring[]
  • healthstring
    One ofhealthydegradedunhealthyrevokeddisabled
  • health_changed_atstring or null
  • health_reasonstring or null
  • hoststring
  • last_discovered_atstring or null
  • logoMcpLogo or null

    upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

    3 fields
    • markstring or null
    • sourcestring or null
      One ofuploadmarkserver
    • urlstring or null
  • logo_removedboolean
  • max_output_bytesinteger
  • namestring
  • oauthMcpOAuthInfo or null
    5 fields
    • clientstring or null
      One ofdynamicown
    • client_idstring or null
    • issuerstring or null
    • resourcestring or null
    • scopesstring[]
  • row_versioninteger
  • server_infoMcpServerInfo
    9 fields
    • capabilitiesstring[]
    • instructionsstring or null
    • namestring or null
    • promptsobject[]
    • protocol_versionstring or null
    • resourcesobject[]
    • titlestring or null
    • versionstring or null
    • website_urlstring or null
  • share_instructionsboolean
  • signed_in_untilstring or null
  • statusstring
    One ofpendingactivedisabled
  • tool_countsMcpToolCounts
    6 fields
    • approvedinteger
    • blockedinteger
    • changedinteger
    • pendinginteger
    • removedinteger
    • totalinteger
  • toolsMcpTool[] or null
    20 fields
    • annotationsobject or null

      Any JSON object.

    • approvalstring
      One ofneveralwayspolicy
    • approved_atstring or null
    • approved_bystring or null
    • auto_approvedboolean
    • changed_atstring or null
    • descriptionstring or null
    • first_seen_atstring or null
    • hashstring
    • input_schemaobject

      Any JSON object.

    • keystring
    • liveMcpToolLive or null

      The definition the server offers now, for a tool that changed since approval.

      6 fields
      • annotationsobject or null

        Any JSON object.

      • descriptionstring or null
      • hashstring or null
      • input_schemaobject

        Any JSON object.

      • output_schemaobject or null

        Any JSON object.

      • titlestring or null
    • namestring
    • output_schemaobject or null

      Any JSON object.

    • removed_atstring or null
    • side_effectsstring
      One ofreadwritedestructive
    • side_effects_sourcestring or null
      One ofserverdefaultperson
    • statsMcpToolStats or null
      5 fields
      • avg_msinteger or null
      • callsinteger
      • errorsinteger
      • last_atstring or null
      • last_errorstring or null
    • statusstring
      One ofpendingapprovedblockedchangedremoved
    • titlestring or null
  • tools_truncatedboolean
  • transportstring
    One ofautostreamable_httpsse
  • transport_detectedstring or null
    One ofstreamable_httpsse
  • updated_atstring or null
  • urlstring
  • usageMcpUsage
    3 fields
    • callsinteger
    • errorsinteger
    • last_used_atstring or null
  • workspace_idstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/oauth/complete" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "code",
    "params": {
      "key": "key"
    },
    "state": "state"
  }'
Response · 200
JSON
{
  "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
  "object": "mcp_server",
  "auth_type": "none",
  "auto_approve": "none",
  "baa": {
    "attested_at": "2026-11-10T09:30:00.000Z",
    "reference": "reference"
  },
  "call_timeout_s": 60,
  "catalog_id": "linear",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "data_class": "public",
  "description": "Reads new support email and drafts a reply.",
  "discovery_error": null,
  "header_names": [
    "X-Api-Key"
  ],
  "health": "healthy",
  "health_changed_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "host": "mcp.example.com",
  "last_discovered_at": "2026-11-10T09:30:00.000Z",
  "logo": {
    "mark": "mark",
    "source": "upload",
    "url": "https://mcp.example.com/mcp"
  },
  "logo_removed": true,
  "max_output_bytes": 1048576,
  "name": "Support triage",
  "oauth": {
    "client": "dynamic",
    "client_id": "client id",
    "issuer": "issuer",
    "resource": "resource",
    "scopes": [
      "agent.view",
      "agent.run",
      "run.view"
    ]
  },
  "row_version": 4,
  "server_info": {
    "capabilities": [
      "tools"
    ],
    "instructions": "instructions",
    "name": "Support triage",
    "prompts": [
      {}
    ],
    "protocol_version": "2025-11-25",
    "resources": [
      {}
    ],
    "title": "Support triage",
    "version": "version",
    "website_url": "https://example.com"
  },
  "share_instructions": true,
  "signed_in_until": "2026-11-10T09:30:00.000Z",
  "status": "pending",
  "tool_counts": {
    "approved": 2,
    "blocked": 2,
    "changed": 2,
    "pending": 2,
    "removed": 2,
    "total": 2
  },
  "tools": [
    {
      "annotations": {},
      "approval": "never",
      "approved_at": "2026-11-10T09:30:00.000Z",
      "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "auto_approved": true,
      "changed_at": "2026-11-10T09:30:00.000Z",
      "description": "Reads new support email and drafts a reply.",
      "first_seen_at": "2026-11-10T09:30:00.000Z",
      "hash": "hash",
      "input_schema": {},
      "key": "key",
      "live": {
        "annotations": {},
        "description": "Reads new support email and drafts a reply.",
        "hash": "hash",
        "input_schema": {},
        "output_schema": {},
        "title": "Support triage"
      },
      "name": "Support triage",
      "output_schema": {},
      "removed_at": "2026-11-10T09:30:00.000Z",
      "side_effects": "read",
      "side_effects_source": "server",
      "stats": {
        "avg_ms": 840,
        "calls": 2,
        "errors": 2,
        "last_at": "2026-11-10T09:30:00.000Z",
        "last_error": null
      },
      "status": "pending",
      "title": "Support triage"
    }
  ],
  "tools_truncated": true,
  "transport": "auto",
  "transport_detected": "streamable_http",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "url": "https://mcp.example.com/mcp",
  "usage": {
    "calls": 2,
    "errors": 2,
    "last_used_at": "2026-11-10T09:30:00.000Z"
  },
  "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
}
post/v1/mcp_servers/{mcp_server_id}/oauth/start

Start MCP OAuth

Needs connection.manage

Finds the server's sign-in server, registers MyDeepAgents there when it allows it (or uses the organization's own app), and returns the consent URL. The console binds state to the browser in a sealed cookie, as for a connection.

Path parameters

  • mcp_server_idstringRequired

Request bodyMcpOAuthStartBody

  • client_idstring or null
    at least 1 charactersat most 500 characters
  • client_secretstring or null
    at least 1 charactersat most 2000 characters

Response201

  • objectstring
    mcp_oauth_start
  • authorization_urlstring
  • mcp_serverMcpServer
    38 fields
    • idstring
    • objectstring
      mcp_server
    • auth_typestring
      One ofnonebearerheadersoauth2
    • auto_approvestring
      One ofnoneread_onlyall
    • baaMcpBaa or null
      2 fields
      • attested_atstring or null
      • referencestring or null
    • call_timeout_sinteger
    • catalog_idstring or null
    • created_atstring or null
    • data_classstring
      One ofpublicinternalpiisensitivephi
    • descriptionstring or null
    • discovery_errorstring or null
    • header_namesstring[]
    • healthstring
      One ofhealthydegradedunhealthyrevokeddisabled
    • health_changed_atstring or null
    • health_reasonstring or null
    • hoststring
    • last_discovered_atstring or null
    • logoMcpLogo or null

      upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

      3 fields
      • markstring or null
      • sourcestring or null
        One ofuploadmarkserver
      • urlstring or null
    • logo_removedboolean
    • max_output_bytesinteger
    • namestring
    • oauthMcpOAuthInfo or null
      5 fields
      • clientstring or null
        One ofdynamicown
      • client_idstring or null
      • issuerstring or null
      • resourcestring or null
      • scopesstring[]
    • row_versioninteger
    • server_infoMcpServerInfo
      9 fields
      • capabilitiesstring[]
      • instructionsstring or null
      • namestring or null
      • promptsobject[]
      • protocol_versionstring or null
      • resourcesobject[]
      • titlestring or null
      • versionstring or null
      • website_urlstring or null
    • share_instructionsboolean
    • signed_in_untilstring or null
    • statusstring
      One ofpendingactivedisabled
    • tool_countsMcpToolCounts
      6 fields
      • approvedinteger
      • blockedinteger
      • changedinteger
      • pendinginteger
      • removedinteger
      • totalinteger
    • toolsMcpTool[] or null
      20 fields
      • annotationsobject or null

        Any JSON object.

      • approvalstring
        One ofneveralwayspolicy
      • approved_atstring or null
      • approved_bystring or null
      • auto_approvedboolean
      • changed_atstring or null
      • descriptionstring or null
      • first_seen_atstring or null
      • hashstring
      • input_schemaobject

        Any JSON object.

      • keystring
      • liveMcpToolLive or null

        The definition the server offers now, for a tool that changed since approval.

        6 fields
        • annotationsobject or null

          Any JSON object.

        • descriptionstring or null
        • hashstring or null
        • input_schemaobject

          Any JSON object.

        • output_schemaobject or null

          Any JSON object.

        • titlestring or null
      • namestring
      • output_schemaobject or null

        Any JSON object.

      • removed_atstring or null
      • side_effectsstring
        One ofreadwritedestructive
      • side_effects_sourcestring or null
        One ofserverdefaultperson
      • statsMcpToolStats or null
        5 fields
        • avg_msinteger or null
        • callsinteger
        • errorsinteger
        • last_atstring or null
        • last_errorstring or null
      • statusstring
        One ofpendingapprovedblockedchangedremoved
      • titlestring or null
    • tools_truncatedboolean
    • transportstring
      One ofautostreamable_httpsse
    • transport_detectedstring or null
      One ofstreamable_httpsse
    • updated_atstring or null
    • urlstring
    • usageMcpUsage
      3 fields
      • callsinteger
      • errorsinteger
      • last_used_atstring or null
    • workspace_idstring
    • created_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
    • updated_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
  • statestring

Status codes

  • 201Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/oauth/start" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "client id",
    "client_secret": "client secret"
  }'
Response · 201
JSON
{
  "object": "mcp_oauth_start",
  "authorization_url": "https://example.com",
  "mcp_server": {
    "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
    "object": "mcp_server",
    "auth_type": "none",
    "auto_approve": "none",
    "baa": {
      "attested_at": "2026-11-10T09:30:00.000Z",
      "reference": "reference"
    },
    "call_timeout_s": 60,
    "catalog_id": "linear",
    "created_at": "2026-11-10T09:30:00.000Z",
    "created_by": {
      "kind": "user",
      "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "name": "Ada Lovelace",
      "email": "ada@example.com"
    },
    "data_class": "public",
    "description": "Reads new support email and drafts a reply.",
    "discovery_error": null,
    "header_names": [
      "X-Api-Key"
    ],
    "health": "healthy",
    "health_changed_at": "2026-11-10T09:30:00.000Z",
    "health_reason": null,
    "host": "mcp.example.com",
    "last_discovered_at": "2026-11-10T09:30:00.000Z",
    "logo": {
      "mark": "mark",
      "source": "upload",
      "url": "https://mcp.example.com/mcp"
    },
    "logo_removed": true,
    "max_output_bytes": 1048576,
    "name": "Support triage",
    "oauth": {
      "client": "dynamic",
      "client_id": "client id",
      "issuer": "issuer",
      "resource": "resource",
      "scopes": [
        "agent.view",
        "agent.run",
        "run.view"
      ]
    },
    "row_version": 4,
    "server_info": {
      "capabilities": [
        "tools"
      ],
      "instructions": "instructions",
      "name": "Support triage",
      "prompts": [
        {}
      ],
      "protocol_version": "2025-11-25",
      "resources": [
        {}
      ],
      "title": "Support triage",
      "version": "version",
      "website_url": "https://example.com"
    },
    "share_instructions": true,
    "signed_in_until": "2026-11-10T09:30:00.000Z",
    "status": "pending",
    "tool_counts": {
      "approved": 2,
      "blocked": 2,
      "changed": 2,
      "pending": 2,
      "removed": 2,
      "total": 2
    },
    "tools": [
      {
        "annotations": {},
        "approval": "never",
        "approved_at": "2026-11-10T09:30:00.000Z",
        "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "auto_approved": true,
        "changed_at": "2026-11-10T09:30:00.000Z",
        "description": "Reads new support email and drafts a reply.",
        "first_seen_at": "2026-11-10T09:30:00.000Z",
        "hash": "hash",
        "input_schema": {},
        "key": "key",
        "live": {
          "annotations": {},
          "description": "Reads new support email and drafts a reply.",
          "hash": "hash",
          "input_schema": {},
          "output_schema": {},
          "title": "Support triage"
        },
        "name": "Support triage",
        "output_schema": {},
        "removed_at": "2026-11-10T09:30:00.000Z",
        "side_effects": "read",
        "side_effects_source": "server",
        "stats": {
          "avg_ms": 840,
          "calls": 2,
          "errors": 2,
          "last_at": "2026-11-10T09:30:00.000Z",
          "last_error": null
        },
        "status": "pending",
        "title": "Support triage"
      }
    ],
    "tools_truncated": true,
    "transport": "auto",
    "transport_detected": "streamable_http",
    "updated_at": "2026-11-10T09:30:00.000Z",
    "updated_by": {
      "kind": "user",
      "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "name": "Ada Lovelace",
      "email": "ada@example.com"
    },
    "url": "https://mcp.example.com/mcp",
    "usage": {
      "calls": 2,
      "errors": 2,
      "last_used_at": "2026-11-10T09:30:00.000Z"
    },
    "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
  },
  "state": "state"
}
post/v1/mcp_servers/{mcp_server_id}/refresh

Refresh MCP server

Needs connection.manage

Reads the tools again: new ones wait for a person (or follow auto_approve), approved ones that changed stop until reviewed, gone ones are marked removed.

Path parameters

  • mcp_server_idstringRequired

Request bodyMcpRefreshRequest

  • approvestring or null
    One ofnoneread_onlyall

Response200

  • objectstring
    mcp_refresh
  • codestring or null
  • countsmap<string, integer>
  • mcp_serverMcpServer
    38 fields
    • idstring
    • objectstring
      mcp_server
    • auth_typestring
      One ofnonebearerheadersoauth2
    • auto_approvestring
      One ofnoneread_onlyall
    • baaMcpBaa or null
      2 fields
      • attested_atstring or null
      • referencestring or null
    • call_timeout_sinteger
    • catalog_idstring or null
    • created_atstring or null
    • data_classstring
      One ofpublicinternalpiisensitivephi
    • descriptionstring or null
    • discovery_errorstring or null
    • header_namesstring[]
    • healthstring
      One ofhealthydegradedunhealthyrevokeddisabled
    • health_changed_atstring or null
    • health_reasonstring or null
    • hoststring
    • last_discovered_atstring or null
    • logoMcpLogo or null

      upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

      3 fields
      • markstring or null
      • sourcestring or null
        One ofuploadmarkserver
      • urlstring or null
    • logo_removedboolean
    • max_output_bytesinteger
    • namestring
    • oauthMcpOAuthInfo or null
      5 fields
      • clientstring or null
        One ofdynamicown
      • client_idstring or null
      • issuerstring or null
      • resourcestring or null
      • scopesstring[]
    • row_versioninteger
    • server_infoMcpServerInfo
      9 fields
      • capabilitiesstring[]
      • instructionsstring or null
      • namestring or null
      • promptsobject[]
      • protocol_versionstring or null
      • resourcesobject[]
      • titlestring or null
      • versionstring or null
      • website_urlstring or null
    • share_instructionsboolean
    • signed_in_untilstring or null
    • statusstring
      One ofpendingactivedisabled
    • tool_countsMcpToolCounts
      6 fields
      • approvedinteger
      • blockedinteger
      • changedinteger
      • pendinginteger
      • removedinteger
      • totalinteger
    • toolsMcpTool[] or null
      20 fields
      • annotationsobject or null

        Any JSON object.

      • approvalstring
        One ofneveralwayspolicy
      • approved_atstring or null
      • approved_bystring or null
      • auto_approvedboolean
      • changed_atstring or null
      • descriptionstring or null
      • first_seen_atstring or null
      • hashstring
      • input_schemaobject

        Any JSON object.

      • keystring
      • liveMcpToolLive or null

        The definition the server offers now, for a tool that changed since approval.

        6 fields
        • annotationsobject or null

          Any JSON object.

        • descriptionstring or null
        • hashstring or null
        • input_schemaobject

          Any JSON object.

        • output_schemaobject or null

          Any JSON object.

        • titlestring or null
      • namestring
      • output_schemaobject or null

        Any JSON object.

      • removed_atstring or null
      • side_effectsstring
        One ofreadwritedestructive
      • side_effects_sourcestring or null
        One ofserverdefaultperson
      • statsMcpToolStats or null
        5 fields
        • avg_msinteger or null
        • callsinteger
        • errorsinteger
        • last_atstring or null
        • last_errorstring or null
      • statusstring
        One ofpendingapprovedblockedchangedremoved
      • titlestring or null
    • tools_truncatedboolean
    • transportstring
      One ofautostreamable_httpsse
    • transport_detectedstring or null
      One ofstreamable_httpsse
    • updated_atstring or null
    • urlstring
    • usageMcpUsage
      3 fields
      • callsinteger
      • errorsinteger
      • last_used_atstring or null
    • workspace_idstring
    • created_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
    • updated_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
  • messagestring or null
  • outcomestring
    One ofokauth_requiredrefusedfailed

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/refresh" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "approve": "none"
  }'
Response · 200
JSON
{
  "object": "mcp_refresh",
  "code": "code",
  "counts": {
    "key": 2
  },
  "mcp_server": {
    "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
    "object": "mcp_server",
    "auth_type": "none",
    "auto_approve": "none",
    "baa": {
      "attested_at": "2026-11-10T09:30:00.000Z",
      "reference": "reference"
    },
    "call_timeout_s": 60,
    "catalog_id": "linear",
    "created_at": "2026-11-10T09:30:00.000Z",
    "created_by": {
      "kind": "user",
      "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "name": "Ada Lovelace",
      "email": "ada@example.com"
    },
    "data_class": "public",
    "description": "Reads new support email and drafts a reply.",
    "discovery_error": null,
    "header_names": [
      "X-Api-Key"
    ],
    "health": "healthy",
    "health_changed_at": "2026-11-10T09:30:00.000Z",
    "health_reason": null,
    "host": "mcp.example.com",
    "last_discovered_at": "2026-11-10T09:30:00.000Z",
    "logo": {
      "mark": "mark",
      "source": "upload",
      "url": "https://mcp.example.com/mcp"
    },
    "logo_removed": true,
    "max_output_bytes": 1048576,
    "name": "Support triage",
    "oauth": {
      "client": "dynamic",
      "client_id": "client id",
      "issuer": "issuer",
      "resource": "resource",
      "scopes": [
        "agent.view",
        "agent.run",
        "run.view"
      ]
    },
    "row_version": 4,
    "server_info": {
      "capabilities": [
        "tools"
      ],
      "instructions": "instructions",
      "name": "Support triage",
      "prompts": [
        {}
      ],
      "protocol_version": "2025-11-25",
      "resources": [
        {}
      ],
      "title": "Support triage",
      "version": "version",
      "website_url": "https://example.com"
    },
    "share_instructions": true,
    "signed_in_until": "2026-11-10T09:30:00.000Z",
    "status": "pending",
    "tool_counts": {
      "approved": 2,
      "blocked": 2,
      "changed": 2,
      "pending": 2,
      "removed": 2,
      "total": 2
    },
    "tools": [
      {
        "annotations": {},
        "approval": "never",
        "approved_at": "2026-11-10T09:30:00.000Z",
        "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "auto_approved": true,
        "changed_at": "2026-11-10T09:30:00.000Z",
        "description": "Reads new support email and drafts a reply.",
        "first_seen_at": "2026-11-10T09:30:00.000Z",
        "hash": "hash",
        "input_schema": {},
        "key": "key",
        "live": {
          "annotations": {},
          "description": "Reads new support email and drafts a reply.",
          "hash": "hash",
          "input_schema": {},
          "output_schema": {},
          "title": "Support triage"
        },
        "name": "Support triage",
        "output_schema": {},
        "removed_at": "2026-11-10T09:30:00.000Z",
        "side_effects": "read",
        "side_effects_source": "server",
        "stats": {
          "avg_ms": 840,
          "calls": 2,
          "errors": 2,
          "last_at": "2026-11-10T09:30:00.000Z",
          "last_error": null
        },
        "status": "pending",
        "title": "Support triage"
      }
    ],
    "tools_truncated": true,
    "transport": "auto",
    "transport_detected": "streamable_http",
    "updated_at": "2026-11-10T09:30:00.000Z",
    "updated_by": {
      "kind": "user",
      "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "name": "Ada Lovelace",
      "email": "ada@example.com"
    },
    "url": "https://mcp.example.com/mcp",
    "usage": {
      "calls": 2,
      "errors": 2,
      "last_used_at": "2026-11-10T09:30:00.000Z"
    },
    "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
  },
  "message": "Summarise today's open tickets.",
  "outcome": "ok"
}
put/v1/mcp_servers/{mcp_server_id}/secret

Put MCP secret

Needs connection.manage

A new token or new header values, tested before they replace the old ones.

Path parameters

  • mcp_server_idstringRequired

Request bodyMcpSecretPut

  • headersmap<string, string> or null
  • tokenstring or null
    at least 1 charactersat most 8192 characters

Response200

  • idstring
  • objectstring
    mcp_server
  • auth_typestring
    One ofnonebearerheadersoauth2
  • auto_approvestring
    One ofnoneread_onlyall
  • baaMcpBaa or null
    2 fields
    • attested_atstring or null
    • referencestring or null
  • call_timeout_sinteger
  • catalog_idstring or null
  • created_atstring or null
  • data_classstring
    One ofpublicinternalpiisensitivephi
  • descriptionstring or null
  • discovery_errorstring or null
  • header_namesstring[]
  • healthstring
    One ofhealthydegradedunhealthyrevokeddisabled
  • health_changed_atstring or null
  • health_reasonstring or null
  • hoststring
  • last_discovered_atstring or null
  • logoMcpLogo or null

    upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

    3 fields
    • markstring or null
    • sourcestring or null
      One ofuploadmarkserver
    • urlstring or null
  • logo_removedboolean
  • max_output_bytesinteger
  • namestring
  • oauthMcpOAuthInfo or null
    5 fields
    • clientstring or null
      One ofdynamicown
    • client_idstring or null
    • issuerstring or null
    • resourcestring or null
    • scopesstring[]
  • row_versioninteger
  • server_infoMcpServerInfo
    9 fields
    • capabilitiesstring[]
    • instructionsstring or null
    • namestring or null
    • promptsobject[]
    • protocol_versionstring or null
    • resourcesobject[]
    • titlestring or null
    • versionstring or null
    • website_urlstring or null
  • share_instructionsboolean
  • signed_in_untilstring or null
  • statusstring
    One ofpendingactivedisabled
  • tool_countsMcpToolCounts
    6 fields
    • approvedinteger
    • blockedinteger
    • changedinteger
    • pendinginteger
    • removedinteger
    • totalinteger
  • toolsMcpTool[] or null
    20 fields
    • annotationsobject or null

      Any JSON object.

    • approvalstring
      One ofneveralwayspolicy
    • approved_atstring or null
    • approved_bystring or null
    • auto_approvedboolean
    • changed_atstring or null
    • descriptionstring or null
    • first_seen_atstring or null
    • hashstring
    • input_schemaobject

      Any JSON object.

    • keystring
    • liveMcpToolLive or null

      The definition the server offers now, for a tool that changed since approval.

      6 fields
      • annotationsobject or null

        Any JSON object.

      • descriptionstring or null
      • hashstring or null
      • input_schemaobject

        Any JSON object.

      • output_schemaobject or null

        Any JSON object.

      • titlestring or null
    • namestring
    • output_schemaobject or null

      Any JSON object.

    • removed_atstring or null
    • side_effectsstring
      One ofreadwritedestructive
    • side_effects_sourcestring or null
      One ofserverdefaultperson
    • statsMcpToolStats or null
      5 fields
      • avg_msinteger or null
      • callsinteger
      • errorsinteger
      • last_atstring or null
      • last_errorstring or null
    • statusstring
      One ofpendingapprovedblockedchangedremoved
    • titlestring or null
  • tools_truncatedboolean
  • transportstring
    One ofautostreamable_httpsse
  • transport_detectedstring or null
    One ofstreamable_httpsse
  • updated_atstring or null
  • urlstring
  • usageMcpUsage
    3 fields
    • callsinteger
    • errorsinteger
    • last_used_atstring or null
  • workspace_idstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X PUT "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/secret" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "headers": {
      "X-Request-Source": "X-Request-Source"
    },
    "token": "••••••••"
  }'
Response · 200
JSON
{
  "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
  "object": "mcp_server",
  "auth_type": "none",
  "auto_approve": "none",
  "baa": {
    "attested_at": "2026-11-10T09:30:00.000Z",
    "reference": "reference"
  },
  "call_timeout_s": 60,
  "catalog_id": "linear",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "data_class": "public",
  "description": "Reads new support email and drafts a reply.",
  "discovery_error": null,
  "header_names": [
    "X-Api-Key"
  ],
  "health": "healthy",
  "health_changed_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "host": "mcp.example.com",
  "last_discovered_at": "2026-11-10T09:30:00.000Z",
  "logo": {
    "mark": "mark",
    "source": "upload",
    "url": "https://mcp.example.com/mcp"
  },
  "logo_removed": true,
  "max_output_bytes": 1048576,
  "name": "Support triage",
  "oauth": {
    "client": "dynamic",
    "client_id": "client id",
    "issuer": "issuer",
    "resource": "resource",
    "scopes": [
      "agent.view",
      "agent.run",
      "run.view"
    ]
  },
  "row_version": 4,
  "server_info": {
    "capabilities": [
      "tools"
    ],
    "instructions": "instructions",
    "name": "Support triage",
    "prompts": [
      {}
    ],
    "protocol_version": "2025-11-25",
    "resources": [
      {}
    ],
    "title": "Support triage",
    "version": "version",
    "website_url": "https://example.com"
  },
  "share_instructions": true,
  "signed_in_until": "2026-11-10T09:30:00.000Z",
  "status": "pending",
  "tool_counts": {
    "approved": 2,
    "blocked": 2,
    "changed": 2,
    "pending": 2,
    "removed": 2,
    "total": 2
  },
  "tools": [
    {
      "annotations": {},
      "approval": "never",
      "approved_at": "2026-11-10T09:30:00.000Z",
      "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "auto_approved": true,
      "changed_at": "2026-11-10T09:30:00.000Z",
      "description": "Reads new support email and drafts a reply.",
      "first_seen_at": "2026-11-10T09:30:00.000Z",
      "hash": "hash",
      "input_schema": {},
      "key": "key",
      "live": {
        "annotations": {},
        "description": "Reads new support email and drafts a reply.",
        "hash": "hash",
        "input_schema": {},
        "output_schema": {},
        "title": "Support triage"
      },
      "name": "Support triage",
      "output_schema": {},
      "removed_at": "2026-11-10T09:30:00.000Z",
      "side_effects": "read",
      "side_effects_source": "server",
      "stats": {
        "avg_ms": 840,
        "calls": 2,
        "errors": 2,
        "last_at": "2026-11-10T09:30:00.000Z",
        "last_error": null
      },
      "status": "pending",
      "title": "Support triage"
    }
  ],
  "tools_truncated": true,
  "transport": "auto",
  "transport_detected": "streamable_http",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "url": "https://mcp.example.com/mcp",
  "usage": {
    "calls": 2,
    "errors": 2,
    "last_used_at": "2026-11-10T09:30:00.000Z"
  },
  "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
}
post/v1/mcp_servers/{mcp_server_id}/tools/decide

Decide MCP tools

Needs connection.manage

A person's review: approve tools (a changed one adopts its new definition as the pin), block them, send them back to review, or correct what a tool does (side_effects) and when an agent must ask first (approval).

Path parameters

  • mcp_server_idstringRequired

Request bodyMcpToolsDecideBody

  • decisionsMcpToolDecision[]Required
    at least 1 itemsat most 500 items
    4 fields
    • namestringRequired
      at least 1 charactersat most 200 characters
    • approvalstring or null
      One ofneveralwayspolicy
    • side_effectsstring or null
      One ofreadwritedestructive
    • statusstring or null
      One ofapprovedblockedpending
  • row_versioninteger or null

Response200

  • idstring
  • objectstring
    mcp_server
  • auth_typestring
    One ofnonebearerheadersoauth2
  • auto_approvestring
    One ofnoneread_onlyall
  • baaMcpBaa or null
    2 fields
    • attested_atstring or null
    • referencestring or null
  • call_timeout_sinteger
  • catalog_idstring or null
  • created_atstring or null
  • data_classstring
    One ofpublicinternalpiisensitivephi
  • descriptionstring or null
  • discovery_errorstring or null
  • header_namesstring[]
  • healthstring
    One ofhealthydegradedunhealthyrevokeddisabled
  • health_changed_atstring or null
  • health_reasonstring or null
  • hoststring
  • last_discovered_atstring or null
  • logoMcpLogo or null

    upload, mark (from the console's library) or server (its own icon). url serves the image (upload and server).

    3 fields
    • markstring or null
    • sourcestring or null
      One ofuploadmarkserver
    • urlstring or null
  • logo_removedboolean
  • max_output_bytesinteger
  • namestring
  • oauthMcpOAuthInfo or null
    5 fields
    • clientstring or null
      One ofdynamicown
    • client_idstring or null
    • issuerstring or null
    • resourcestring or null
    • scopesstring[]
  • row_versioninteger
  • server_infoMcpServerInfo
    9 fields
    • capabilitiesstring[]
    • instructionsstring or null
    • namestring or null
    • promptsobject[]
    • protocol_versionstring or null
    • resourcesobject[]
    • titlestring or null
    • versionstring or null
    • website_urlstring or null
  • share_instructionsboolean
  • signed_in_untilstring or null
  • statusstring
    One ofpendingactivedisabled
  • tool_countsMcpToolCounts
    6 fields
    • approvedinteger
    • blockedinteger
    • changedinteger
    • pendinginteger
    • removedinteger
    • totalinteger
  • toolsMcpTool[] or null
    20 fields
    • annotationsobject or null

      Any JSON object.

    • approvalstring
      One ofneveralwayspolicy
    • approved_atstring or null
    • approved_bystring or null
    • auto_approvedboolean
    • changed_atstring or null
    • descriptionstring or null
    • first_seen_atstring or null
    • hashstring
    • input_schemaobject

      Any JSON object.

    • keystring
    • liveMcpToolLive or null

      The definition the server offers now, for a tool that changed since approval.

      6 fields
      • annotationsobject or null

        Any JSON object.

      • descriptionstring or null
      • hashstring or null
      • input_schemaobject

        Any JSON object.

      • output_schemaobject or null

        Any JSON object.

      • titlestring or null
    • namestring
    • output_schemaobject or null

      Any JSON object.

    • removed_atstring or null
    • side_effectsstring
      One ofreadwritedestructive
    • side_effects_sourcestring or null
      One ofserverdefaultperson
    • statsMcpToolStats or null
      5 fields
      • avg_msinteger or null
      • callsinteger
      • errorsinteger
      • last_atstring or null
      • last_errorstring or null
    • statusstring
      One ofpendingapprovedblockedchangedremoved
    • titlestring or null
  • tools_truncatedboolean
  • transportstring
    One ofautostreamable_httpsse
  • transport_detectedstring or null
    One ofstreamable_httpsse
  • updated_atstring or null
  • urlstring
  • usageMcpUsage
    3 fields
    • callsinteger
    • errorsinteger
    • last_used_atstring or null
  • workspace_idstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/tools/decide" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "decisions": [
      {
        "approval": "never",
        "name": "Support triage",
        "side_effects": "read",
        "status": "approved"
      }
    ],
    "row_version": 4
  }'
Response · 200
JSON
{
  "id": "mcp_01jc832gmyrb97hnzx3h75bsfd",
  "object": "mcp_server",
  "auth_type": "none",
  "auto_approve": "none",
  "baa": {
    "attested_at": "2026-11-10T09:30:00.000Z",
    "reference": "reference"
  },
  "call_timeout_s": 60,
  "catalog_id": "linear",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "data_class": "public",
  "description": "Reads new support email and drafts a reply.",
  "discovery_error": null,
  "header_names": [
    "X-Api-Key"
  ],
  "health": "healthy",
  "health_changed_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "host": "mcp.example.com",
  "last_discovered_at": "2026-11-10T09:30:00.000Z",
  "logo": {
    "mark": "mark",
    "source": "upload",
    "url": "https://mcp.example.com/mcp"
  },
  "logo_removed": true,
  "max_output_bytes": 1048576,
  "name": "Support triage",
  "oauth": {
    "client": "dynamic",
    "client_id": "client id",
    "issuer": "issuer",
    "resource": "resource",
    "scopes": [
      "agent.view",
      "agent.run",
      "run.view"
    ]
  },
  "row_version": 4,
  "server_info": {
    "capabilities": [
      "tools"
    ],
    "instructions": "instructions",
    "name": "Support triage",
    "prompts": [
      {}
    ],
    "protocol_version": "2025-11-25",
    "resources": [
      {}
    ],
    "title": "Support triage",
    "version": "version",
    "website_url": "https://example.com"
  },
  "share_instructions": true,
  "signed_in_until": "2026-11-10T09:30:00.000Z",
  "status": "pending",
  "tool_counts": {
    "approved": 2,
    "blocked": 2,
    "changed": 2,
    "pending": 2,
    "removed": 2,
    "total": 2
  },
  "tools": [
    {
      "annotations": {},
      "approval": "never",
      "approved_at": "2026-11-10T09:30:00.000Z",
      "approved_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "auto_approved": true,
      "changed_at": "2026-11-10T09:30:00.000Z",
      "description": "Reads new support email and drafts a reply.",
      "first_seen_at": "2026-11-10T09:30:00.000Z",
      "hash": "hash",
      "input_schema": {},
      "key": "key",
      "live": {
        "annotations": {},
        "description": "Reads new support email and drafts a reply.",
        "hash": "hash",
        "input_schema": {},
        "output_schema": {},
        "title": "Support triage"
      },
      "name": "Support triage",
      "output_schema": {},
      "removed_at": "2026-11-10T09:30:00.000Z",
      "side_effects": "read",
      "side_effects_source": "server",
      "stats": {
        "avg_ms": 840,
        "calls": 2,
        "errors": 2,
        "last_at": "2026-11-10T09:30:00.000Z",
        "last_error": null
      },
      "status": "pending",
      "title": "Support triage"
    }
  ],
  "tools_truncated": true,
  "transport": "auto",
  "transport_detected": "streamable_http",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "url": "https://mcp.example.com/mcp",
  "usage": {
    "calls": 2,
    "errors": 2,
    "last_used_at": "2026-11-10T09:30:00.000Z"
  },
  "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h"
}
post/v1/mcp_servers/{mcp_server_id}/tools/{tool_name}/call

Call MCP tool

Needs connection.use

Runs one tool now, as the person asking (their profile and data-class ceiling apply). Pending and changed tools may be tried, so a person can see what they do before approving them; the call is real, so a write tool really writes.

Path parameters

  • mcp_server_idstringRequired
  • tool_namestringRequired

Request bodyMcpToolCallBody

  • argumentsobject

    Any JSON object.

Response200

  • objectstring
    mcp_tool_call
  • codestring or null
  • duration_msinteger or null
  • messagestring or null
  • okboolean
  • outputobject or null

    Any JSON object.

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/tools/search_docs/call" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "arguments": {
      "query": "rate limits"
    }
  }'
Response · 200
JSON
{
  "object": "mcp_tool_call",
  "code": "code",
  "duration_ms": 840,
  "message": "Summarise today's open tickets.",
  "ok": true,
  "output": {}
}

Build with us

Ready for your first call?

Early access is open. Tell us what you want your agents to do, and we will help you get your first key.