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/mcpSetup
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.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | Yes | — | Natural-language search query (1–500 characters) |
page | integer | No | 1 | 1-based page number |
page_size | integer | No | 10 | Results 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}.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Profile 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.code | Condition | Agent behaviour |
|---|---|---|
off_topic_query | Query is not a people-search query | Rephrase and retry |
invalid_pagination | page * page_size exceeds the 1000 max result window | Lower page and retry |
profile_not_found | No profile exists for the given id | Do not retry — check the id |
validation_error | A parameter failed validation | Fix the input and retry |
invalid_api_key | Missing or invalid API key | Stop — fix the client config |
out_of_credits | Credit balance is zero or negative | Stop — the message carries an upgrade_url to top up the account |
account_not_authorized | Account not authorized | Stop |
rate_limited | Rate limit exceeded | Retry after the delay in the message |
upstream_unavailable | Upstream dependency is unavailable | Retry with backoff |
search_unavailable | Search is temporarily degraded | Retry 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
| Symptom | Likely cause |
|---|---|
| The tools never appear in the client | The URL is wrong, or the client does not support custom header configuration |
invalid_api_key | The x-api-key header is missing, or the key is unrecognised |
out_of_credits or rate_limited | Account limits — see Rate limits |
Repeated 503 responses | The API is temporarily degraded; retry with backoff |
