Documentation

MCP server

Connect the Ask Xverum API to Claude, or any MCP-compatible client, as agent tools — search people and fetch profiles without writing HTTP calls.

The Xverum MCP server exposes Ask Xverum as tools for AI agents (Claude Desktop, Claude Code, or any Model Context Protocol client). Once connected, the agent can search professional profiles and fetch a single profile without calling the REST API directly.

It is a hosted, multi-tenant gateway operated by Xverum — there is nothing to install or run. You point your client at the endpoint below and supply your own API key; the gateway forwards it as x-api-key on every /v1 call. The key is the identity: it is never passed in tool arguments.

https://mcp.xverum.com/mcp

Setup

1. Get your API key

Your API key is available in your Xverum dashboard — no need to contact support. It goes in your MCP client's header configuration (below), and is sent as the x-api-key header on every request. See Authentication.

2. Register with Claude Desktop

Open Settings → Developer → Edit Config and add:

{
  "mcpServers": {
    "xverum": {
      "url": "https://mcp.xverum.com/mcp",
      "headers": {
        "x-api-key": "XVERUM-API-KEY"
      }
    }
  }
}

3. Register with Claude Code

claude mcp add --transport http xverum \
  https://mcp.xverum.com/mcp \
  --header "x-api-key: XVERUM-API-KEY"

4. Verify

Restart Claude Desktop, or run /mcp in Claude Code. You should see xverum listed with the tools search_people_xverum and enrich_person_xverum.

Your API key is a credential — treat the client config file like any other secret. A request to /mcp with no key is rejected with 401 before any search runs.

Tools

Both tools are read-only. The samples below are synced from the public tools reference, so this page and that repo cannot disagree. Each request is written as the call an agent makes; each response is the payload it gets back, which arrives on the wire inside result.structuredContent.

search_people_xverum

Search professional profiles with a natural-language query. Maps to POST /v1/search.

ParameterTypeRequiredDefaultDescription
querystringYesNatural-language search query (1–500 characters)
pageintegerNo11-based page number
page_sizeintegerNo10Results per page (1–100)

Returns results (an array of profile cards with id, social_url, full_name, headline, location, company_name, position, industry, evidence_summary), plus result_type, total_count, page, page_size, credits_used, credits_remaining, and request_id — the same shape as the REST endpoint.

evidence_summary is a freshness label on each profile — from Verified last 30 days down to Verified over 120 days ago — so an agent can weigh how current a match is before acting on it.

Each result costs 1 credit, so ask for the smallest page_size that answers the question.

Example request:

search_people_xverum("senior ML engineer in Berlin with PyTorch experience", page_size=1)

Example response:

{
  "result_type": "people",
  "results": [
    {
      "id": "482910371",
      "social_url": "https://linkedin.com/in/john-doe2",
      "full_name": "John Doe",
      "headline": "Senior ML Engineer at DeepMind",
      "location": "Berlin, Germany",
      "company_name": "DeepMind",
      "position": "Senior ML Engineer",
      "industry": "artificial intelligence",
      "evidence_summary": "Verified last 30 days"
    }
  ],
  "total_count": 38,
  "page": 1,
  "page_size": 1,
  "credits_used": 1,
  "credits_remaining": 4999,
  "request_id": "9f1c2a7e6b3d4f08"
}

enrich_person_xverum

Fetch one person's full profile by id — employment history, background and seniority. Maps to GET /v1/profiles/{id}.

ParameterTypeRequiredDescription
idstringYesProfile id, e.g. from a search_people_xverum result

Example request:

enrich_person_xverum("482910371")

Example response:

{
  "social_url": "https://linkedin.com/in/john-doe2",
  "full_name": "John Doe",
  "headline": "Senior ML Engineer",
  "location": "Berlin, Germany",
  "company_name": "DeepMind",
  "position": "Senior ML Engineer",
  "industry": "artificial intelligence",
  "evidence_summary": "Verified last 30 days",
  "experience": [
    {
      "position": "Senior ML Engineer",
      "company_name": "DeepMind",
      "start_time": "Mar 2022",
      "end_time": null,
      "duration": "3 yrs 2 mos",
      "location": "Berlin, Germany",
      "job_description": "Developing and deploying large-scale recommendation models.",
      "industry": "artificial intelligence"
    }
  ],
  "about_me": "Building production ML systems at scale.",
  "seniority": "senior",
  "credits_used": 4,
  "credits_remaining": 4995,
  "request_id": "1a2b3c4d5e6f7081"
}

The payload adds evidence_summary — the same freshness label the search results carry — alongside the profile fields.

One call returns the whole profile and costs 4 credits. A repeat fetch of the same id within a short window re-reads fresh data but charges 0. The payload matches the REST endpoint exactly — see Get profile for the full field list.

Rate limits and billing

Tool calls count against the same per-key quota as direct API calls — 60 requests/minute by default. Credits are charged identically: 1 credit per search result and 4 credits per profile fetch. Every response echoes credits_used and credits_remaining. See Rate limits.

Errors

Both tools surface the structured /v1 error envelope (see Authentication) as an agent-readable tool error. Some conditions are worth retrying, others are not:

error.codeConditionAgent behaviour
off_topic_queryQuery is not a people-search queryRephrase and retry
invalid_paginationpage * page_size exceeds the 1000 max result windowLower page and retry
profile_not_foundNo profile exists for the given idDo not retry — check the id
validation_errorA parameter failed validationFix the input and retry
invalid_api_keyMissing or invalid API keyStop — fix the client config
out_of_creditsCredit balance is zero or negativeStop — the message carries an upgrade_url to top up the account
account_not_authorizedAccount not authorizedStop
rate_limitedRate limit exceededRetry after the delay in the message
upstream_unavailableUpstream dependency is unavailableRetry with backoff
search_unavailableSearch is temporarily degradedRetry with backoff

Other MCP clients

Most MCP clients accept a JSON config with a url and a headers map — the Claude Desktop snippet above works in Cursor, Continue, and others with little or no change. Consult your client's documentation for where its config file lives; the URL and the x-api-key header are the same regardless of client.

Troubleshooting

SymptomLikely cause
The tools never appear in the clientThe URL is wrong, or the client does not support custom header configuration
invalid_api_keyThe x-api-key header is missing, or the key is unrecognised
out_of_credits or rate_limitedAccount limits — see Rate limits
Repeated 503 responsesThe API is temporarily degraded; retry with backoff