For agents
The index is readable by machines.
getmy.cv runs a public, read-only MCP server. Any MCP client can search the index, browse categories in rank order, and read a full profile. There is no key, no sign-up, and no rate-limit handshake — and nothing behind it but published profiles.
Endpoint · Streamable HTTP
https://getmy.cv/api/mcpConnect a client
One line, or one config block.
Claude Code
Add --scope user to make it available in every project instead of this one.
claude mcp add --transport http getmycv https://getmy.cv/api/mcpClaude Desktop · claude_desktop_config.json
Restart Claude Desktop after editing. On a build old enough to speak only stdio, use the mcp-remote block below instead.
{
"mcpServers": {
"getmycv": {
"type": "http",
"url": "https://getmy.cv/api/mcp"
}
}
}Cursor · .cursor/mcp.json — and any MCP-over-HTTP client
The same block works in Claude Code's project .mcp.json, Windsurf, Zed, Cline, and anything else that speaks MCP over HTTP. Cursor also accepts it without the type line.
{
"mcpServers": {
"getmycv": {
"type": "http",
"url": "https://getmy.cv/api/mcp"
}
}
}stdio-only clients · mcp-remote
mcp-remote bridges a stdio client to a remote HTTP server. Needs Node on the machine running the client.
{
"mcpServers": {
"getmycv": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://getmy.cv/api/mcp"]
}
}
}Tools
6 tools, read-only.
This list is generated from the running server’s tool registry, so it is what your client will actually see on tools/list.
- list_categories
- List every expert category on getmy.cv, with the slug used to filter the index and how many published experts are in each.
- no parameters
- get_index
- Browse the getmy.cv index in rank order: highest lifetime spend first, ties broken by who paid earliest. Use this when the user wants to know who is at the top, or wants an overview of a field rather than a match for particular words — for a specific skill, name, or brief, use search_experts instead. Optionally scope to one category slug from list_categories. `rank` is the profile's absolute position in the full published index, so it stays true on every page. Pass the returned `next_cursor` back as `cursor` to continue; a null next_cursor means the end of the index.
categorystringCategory slug to filter by, e.g. 'design'. From list_categories.cursorstringThe next_cursor from a previous get_index call. Omit for the first page.limitinteger · default 20- search_experts
- Find experts on getmy.cv by what they do. Full-text search over names, headlines, skills, location, and page content, with a fuzzy fallback that tolerates misspelled names. This is the right tool for a brief ('someone who can audit a Postgres schema'), a skill, or a half-remembered name. Results are grouped by match quality first and by lifetime spend within each group, so `match: "strong"` entries matched the person's name, headline, or declared skills, `"body"` matched only their page text, and `"fuzzy"` is an approximate spelling match. Ranking inside a group reflects what the expert has paid, not relevance — treat `position` as reading order, not as an endorsement. Combine `skill`, `location`, and `category` to narrow (skills are ANDed). Pass the returned `next_cursor` back as `cursor` for the next page; null means there are no more results. Only published profiles are ever returned.
querystring · requiredWhat you are looking for, in plain words. Quoted phrases and -exclusions are honoured.skillstring[]Skill slugs the profile must ALL have, e.g. ['postgres','go']. Lowercase, hyphenated.locationstringLocation slug, e.g. 'london' or 'sao-paulo'.categorystringCategory slug to filter by. From list_categories.cursorstringThe next_cursor from a previous search_experts call with the same query and filters.limitinteger · default 20- related_skills
- Given one skill, return the skills that most often appear alongside it on getmy.cv, strongest association first. Scored by pointwise mutual information over the whole published index, not by raw co-occurrence, so the answer is the skills genuinely paired with this one rather than whichever skills are simply most common. `pmi` above 0 means the two appear together more often than chance; `pair_count` is how many published experts hold both. Use this to widen or sharpen a search before calling search_experts — every returned `slug` is a valid `skill` filter there. `cluster` is the broader community the skill sits in, and it is the same grouping the /skills map page shows. Aliases and any capitalisation resolve to the canonical skill.
skillstring · requiredA skill name or slug, e.g. 'rust', 'Design Systems', 'postgres'.limitinteger · default 10- related_experts
- Given one getmy.cv username, return other published experts with the most similar skill sets. Similarity is Jaccard overlap over declared skills (`shared` / total distinct skills across both), and within an equal overlap the ordering is the index's own: whoever has committed more comes first. So `position` is reading order, not a similarity ranking to be trusted beyond `similarity` itself. Use this to broaden a shortlist after get_profile or search_experts found one good match. Only published profiles are ever returned.
usernamestring · requiredA getmy.cv username, e.g. 'sarah-chen'.limitinteger · default 6- get_profile
- Get the full public profile for a getmy.cv username: headline, links, skills, rank, score, and the full page content in markdown.
usernamestring · required
Try it
Then ask in plain words.
- Find me a fintech design systems expert on getmy.cv and read their page.
- Who is at the top of the getmy.cv engineering index right now, and what did they commit?
- Search getmy.cv for someone in Amsterdam who can audit a Postgres schema.
- List every getmy.cv category and how many published experts each one holds.
Without MCP
The index is markdown all the way down.
Every profile page ships two discovery relations in its Link header — a markdown alternate of that page, and the llms.txt that describes the whole corpus — so a crawler never has to guess.
- llms.txt
The index as links: the top 100 profiles, every category, and the endpoints. Spec v2.
- llms-full.txt
The same index with the top 25 profiles inlined in full.
- /{username}.md
Any published profile as clean markdown. A draft or an unclaimed name is a 404.
- robots.txt
Names every AI crawler token explicitly, and lists every sitemap shard.
No client at all · raw JSON-RPC
Streamable HTTP answers a single request over a one-frame event stream, so the reply arrives as a data: line.
curl -sN https://getmy.cv/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'No MCP client at all
A plain REST API, if that is what your stack speaks.
GET /api/v1/experts is the same search behind everything above — the same tiered relevance, the same filters, the same keyset pagination — as plain JSON over HTTP. Published profiles only, same as MCP.
Example · design experts in Amsterdam
curl "https://getmy.cv/api/v1/experts?q=design&location=amsterdam&limit=10"- openapi.json
The full OpenAPI 3.1 description — every parameter, every response field, checked against what the endpoint actually returns before it was published.
- .well-known/api-catalog
Both APIs on this page — the REST endpoint and the MCP server — as one RFC 9727 linkset, for a client that discovers APIs by convention rather than by reading this page.
What is never returned
Published pages, and nothing else.
No email addresses, no account identifiers, no view counts, and no unpublished drafts — over MCP, in llms.txt, or at /{username}.md. A profile is visible to an agent when, and only when, its owner has published it.
Rank is lifetime spend, highest first, ties to whoever committed first. It is a claim about money committed, never an endorsement of quality — how ranking works explains the whole of it.