Documentation
Everything an agent needs to read the job market
People, companies and live job postings, over one REST API and one MCP server. Start with the quickstart if you want it working in five minutes, or the API reference if you already know the shape.
Connect it to what you already use
Four skills that teach any assistant the endpoints, the field vocabulary, and the two-step shape. They work in any agent, with MCP or without it.
The assistant now knows the endpoints and the field names, so it writes the request itself instead of guessing at the shape.
Search biotech companies with 50 to 500 employees and show me what comes back.
All four skillsnpx skills add MetixAI-Official/metix-skills
# Four skills: people search, company search,
# job search, and one that spans all three when
# a question needs more than one of them.
# Same key as everything else here. Set it in
# the shell you run the agent from:
export METIX_KEY="metix_xxxxxxxxxxxx"Register the MCP server over streamable HTTP. Create a key first: the same one works for MCP, for the skills, and for the REST API.
The seven data tools appear in the agent's tool list. You never name them: ask for what you want and it picks.
Find ML engineers in San Francisco, then read the records behind the ids.
MCP setupclaude mcp add --scope user --transport http metix \
https://mira-api.metix.ai/mcp \
--header "Authorization: Bearer $METIX_KEY"
claude mcp list
# metix: https://mira-api.metix.ai/mcp (HTTP) - Connected
# Older clients speak legacy SSE instead. Point
# those at the same host on /sse, with the same
# Authorization header.The same server, registered with Codex. The key stays in your environment instead of being written into the config file, and the skills on the first tab install for Codex as well.
Same seven tools, same key. Codex sandboxes shell commands without network access by default, which is fine for MCP and blocks a raw curl until you allow it.
Which companies posted data engineer roles in the US this month?
MCP setupcodex mcp add metix \
--url https://mira-api.metix.ai/mcp \
--bearer-token-env-var METIX_KEY
codex mcp get metix
# transport: streamable_http
# bearer_token_env_var: METIX_KEY
# Read at call time, so it never lands in the file.
# The Skills tab covers Codex too: its installer
# writes .agents/skills, which Codex reads.One request against the live API. It answers with ids, which is what a working search looks like.
You get ids back, never records. Send up to 100 of them to the matching detail route, and choose the fields you want with _source.
Quickstartcurl -s -X POST "https://mira-api.metix.ai/v1/people-search" \
-H "Authorization: Bearer $METIX_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "ML engineers in San Francisco", "size": 25}'
# {"code": 200, "msg": "ok", "data": {"profile_ids": [
# "UHyKQXeFCLaGeBwgjwisBg", "YhlkBSsJWv7zeGUJMaymMw" ]}}
# Ids only. Records come from the detail route.Plain requests. There is no SDK to install, so there is no SDK version to keep up with.
Two calls, always in that order: search for ids, then read the records behind them. Ids bill far cheaper than records, so search wider than you plan to read.
Quickstartimport os, requests
r = requests.post("https://mira-api.metix.ai/v1/people-search",
headers={"Authorization": f"Bearer {os.environ['METIX_KEY']}"},
json={"text": "ML engineers in San Francisco", "size": 25})
ids = r.json()["data"]["profile_ids"]
# Ids, not records. Send up to 100 of them to
# POST /entity/v1/profiles/detail-by-id
print(ids)Plain fetch. There is no SDK to install, so there is no SDK version to keep up with.
Two calls, always in that order: search for ids, then read the records behind them. Ids bill far cheaper than records, so search wider than you plan to read.
Quickstartconst r = await fetch("https://mira-api.metix.ai/v1/people-search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.METIX_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ text: "ML engineers in San Francisco", size: 25 }),
});
// Ids, not records. Send up to 100 to the detail route.
const { profile_ids } = (await r.json()).data;Three datasets
People, jobs, and companies. Each one is searched with the same Query Spec grammar and read through its own detail route, so learning one dataset teaches you the other two.
People
Search + detailSearch professional profiles by role, skills, employer, education, location, and seniority, then read the records you keep.
Jobs
Search + detailSearch active openings by role, function, company, location, pay, and posting date as a live demand signal.
Companies
Search + detailSearch organizations by industry, size, headquarters, and funding, and attach that context to people and job results.
Agents and MCP
Agent accessReach the same three datasets from an MCP client or an agent skill, under the same key and the same Credit rules.
How a request works
Every dataset works the same way, and it is worth knowing before you write any code: search hands back encrypted string IDs, and a second call turns the IDs you keep into records. There is no single call that does both.
- Step
- 1
- Call
- Search the dataset with a Query Spec tree
- What comes back
- Encrypted string IDs, plus a cursor while more pages remain
- Step
- 2
- Call
- Send up to 100 of those IDs to the detail route
- What comes back
- Full public records, and the IDs that could not be resolved
- Step
- 3
- Call
- Join across datasets
- What comes back
- Company context for a job, or the people inside a company
Search results are IDs
One data foundation, three access surfaces
- Surface
- Metix AI skills
- Use it when
- An agent needs reusable multi-step search and analysis instructions
- Start here
- /docs/skills
- Surface
- MCP
- Use it when
- A compatible client should reach the same data conversationally
- Start here
- /docs/mcp
- Surface
- REST API
- Use it when
- A product needs deterministic requests and JSON responses
- Start here
- /docs/quickstart
MCP schema boundary