Skip to main content
POST
/
wp-json
/
getmcp
/
v1
/
servers
/
{server_id}
/
tools
/
import-getmcp
curl --request POST \
     --url https://yoursite.com/wp-json/getmcp/v1/servers/836995ae-1cff-41ec-823e-a4f07ccca3a0/tools/import-getmcp \
     --header 'Authorization: Bearer gmcp_your_api_key' \
     --header 'content-type: application/json' \
     --data @./manifest.json
{
  "created": [
    { "tool_id": 91, "uuid": "5376af81-6bb8-4b01-800c-508d7672e394", "name": "Get Weather", "slug": "get_weather" },
    { "tool_id": 92, "uuid": "1a2b3c4d-5e6f-7081-92a3-b4c5d6e7f809", "name": "List Forecasts", "slug": "list_forecasts" }
  ],
  "skipped": [
    { "temp_id": "idx_2", "name": "Existing Tool", "reason": "slug_exists" }
  ],
  "failed": [
    { "temp_id": "idx_5", "name": "", "error": "name is required" }
  ]
}
Counterpart to POST /tools/export. Takes a manifest object (with the getmcp/tools-v1 envelope, or a bare tools[] array) and creates the listed tools on the target server in a single round-trip — no two-phase confirmation step.
Slug collisions default to skip (the existing tool is left alone and the candidate appears in skipped[]). Pass on_conflict: "duplicate" to let ToolManager auto-suffix the new slug instead.
Hard cap of 1000 tools per import. Larger manifests return 413 Payload Too Large — split the upload into multiple smaller manifests if you hit this.

Path Parameters

server_id
string
required
The UUID of the server to import into (e.g. 836995ae-1cff-41ec-823e-a4f07ccca3a0). Numeric IDs are also accepted for backwards compatibility.

Body Parameters

format
string
Manifest format identifier. Must start with getmcp/tools-v (e.g. getmcp/tools-v1). Optional — bare arrays without an envelope are also accepted.
exported_at
string
Optional ISO 8601 timestamp from the source manifest. Carried through for traceability; not validated.
server
object
Optional { name, slug } block from the source server. Carried through for traceability; not used to override the target.
tools
array
required
Array of tool objects produced by the export endpoint. Each entry uses the same shape as the export manifest: name, slug, description, endpoint_url, http_method, input_schema, parameter_mapping, response_mapping, headers, timeout, cache_ttl, retry_count, retry_backoff, rate_limit_per_min, status, tags, sort_order. The name field is required per row.
on_conflict
string
default:"skip"
How to handle slug collisions. One of: skip (default — record goes into skipped[]), duplicate (auto-suffix the slug).
curl --request POST \
     --url https://yoursite.com/wp-json/getmcp/v1/servers/836995ae-1cff-41ec-823e-a4f07ccca3a0/tools/import-getmcp \
     --header 'Authorization: Bearer gmcp_your_api_key' \
     --header 'content-type: application/json' \
     --data @./manifest.json
{
  "created": [
    { "tool_id": 91, "uuid": "5376af81-6bb8-4b01-800c-508d7672e394", "name": "Get Weather", "slug": "get_weather" },
    { "tool_id": 92, "uuid": "1a2b3c4d-5e6f-7081-92a3-b4c5d6e7f809", "name": "List Forecasts", "slug": "list_forecasts" }
  ],
  "skipped": [
    { "temp_id": "idx_2", "name": "Existing Tool", "reason": "slug_exists" }
  ],
  "failed": [
    { "temp_id": "idx_5", "name": "", "error": "name is required" }
  ]
}

Status Codes

CodeMeaning
200Import processed. Inspect created, skipped, and failed for per-tool outcomes.
400Empty manifest or unsupported format.
40214-day trial expired and no active license.
403Current license tier does not allow getMCP manifest import.
404Server not found.
413Manifest exceeds the 1000-tool per-import cap.