Give your agent web search and authoritative datasets: S&P Global, FRED, OECD, SimilarWeb & more.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Tako API token as a Bearer credential, e.g. `Bearer <token>` (CLI/desktop hosts such as Claude Code, Cursor, Windsurf). Get one at tako.com -> account settings -> API tokens. Web hosts (Claude.ai, ChatGPT) use the server's OAuth flow instead, so this header is optional.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Find what data Tako holds on an entity or a metric, and the canonical name it holds it under. Best for: coverage questions themselves, or a metric's canonical name before a priced search. Put a company, person, or place in `q` to list the metrics tracked on it; put a metric in `q` to list the entities it covers. Add `metric` when you know the measure — you get the resolved pair and a ready-to-run `next_call`. Search on the canonical names it returns, not your own phrasing — `tako_search` matches the graph's names, not yours. A name here means the graph tracks it, not that a card exists. If the follow-up search comes back empty, say Tako has no card for it rather than rephrasing the query. Hand a node id to `tako_graph_related` to see what else connects to it.
The entity or metric to look up by name — "Carnival", "United States", "Nvidia". Put the measure in `metric`, not here.
NER label to prefer for `q` — a boost, not a filter. Set it when you can categorize the term: company → ORG, place → GPE, person → PERSON. It never applies to `metric`.
How many candidates to resolve for each of `q` and `metric`. Raising it widens what the tool considers, not just what it shows: a deeper metric can become the one `next_call` names.
Narrow resolution to one kind, an entity or a metric. Omit to resolve both.
The measure, when you already know it — "gross margin", "capex". Supplying it resolves the entity+metric pair directly; omit it to browse everything the entity has.
Find what data Tako holds on an entity or a metric, and the canonical name it holds it under. Best for: coverage questions themselves, or a metric's canonical name before a priced search. Put a company, person, or place in `q` to list the metrics tracked on it; put a metric in `q` to list the entities it covers. Add `metric` when you know the measure — you get the resolved pair and a ready-to-run `next_call`. Search on the canonical names it returns, not your own phrasing — `tako_search` matches the graph's names, not yours. A name here means the graph tracks it, not that a card exists. If the follow-up search comes back empty, say Tako has no card for it rather than rephrasing the query. Hand a node id to `tako_graph_related` to see what else connects to it.
| Argument | Type | Description |
|---|---|---|
| q* | string | The entity or metric to look up by name — "Carnival", "United States", "Nvidia". Put the measure in `metric`, not here. |
| label | string | NER label to prefer for `q` — a boost, not a filter. Set it when you can categorize the term: company → ORG, place → GPE, person → PERSON. It never applies to `metric`. |
| limit | integer | How many candidates to resolve for each of `q` and `metric`. Raising it widens what the tool considers, not just what it shows: a deeper metric can become the one `next_call` names. |
| types | string | Narrow resolution to one kind, an entity or a metric. Omit to resolve both. |
| metric | string | The measure, when you already know it — "gross margin", "capex". Supplying it resolves the entity+metric pair directly; omit it to browse everything the entity has. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"minLength": 2,
"description": "The entity or metric to look up by name — \"Carnival\", \"United States\", \"Nvidia\". Put the measure in `metric`, not here."
},
"label": {
"enum": [
"PERSON",
"ORG",
"GPE",
"LOC",
"PRODUCT",
"EVENT",
"LANGUAGE",
"MONEY",
"METRIC",
"STOCK_TICKER",
"WEBSITE"
],
"type": "string",
"description": "NER label to prefer for `q` — a boost, not a filter. Set it when you can categorize the term: company → ORG, place → GPE, person → PERSON. It never applies to `metric`."
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "How many candidates to resolve for each of `q` and `metric`. Raising it widens what the tool considers, not just what it shows: a deeper metric can become the one `next_call` names."
},
"types": {
"enum": [
"entity",
"metric"
],
"type": "string",
"description": "Narrow resolution to one kind, an entity or a metric. Omit to resolve both."
},
"metric": {
"type": "string",
"minLength": 2,
"description": "The measure, when you already know it — \"gross margin\", \"capex\". Supplying it resolves the entity+metric pair directly; omit it to browse everything the entity has."
}
}
}Fetch the full content behind a url: a web page's text, or an exportable Tako card's data rows. Batch up to 10 urls in one call — each one is billed and fails on its own. Fetch only cards that `tako_search` marked `exportable: true`. Rows bill per 1,000 delivered, so set `max_rows` when the recent rows are enough. A website-traffic or SEO card also bills a per-unit data minimum that `max_rows` doesn't bound. If a page is long, such as a filing or an annual report, set `query` to a question to get back only the passages that answer it. Best for: reading one source in full — a page you need to quote, or the rows behind a card you need to compute over.
| Argument | Type | Description |
|---|---|---|
| urls* | array | The urls to fetch: a Tako card url or a web result url. One call for 8 urls costs the same as 8 separate calls and saves 7 round trips. |
| query | string | Web pages only: a question the passages should answer. The result holds those passages instead of the page. Omit it to get the whole page. |
| max_rows | integer | Tako cards only: how many rows to return. Omit it for the whole card, up to 2,000 rows. Every row delivered is billed, so lower it when the recent rows are enough. |
| max_chars | integer | Web pages only: character cap on the extracted text. Inline fetches default to 100,000 per url, less across a batch. Raise it for a long document; `truncated` reports a cut. With `query`, it caps the passages instead: 100 to 20,000, and 4,000 by default. |
Explore what a graph node connects to — its metrics, the entities a metric covers, competitors, industry, index membership, and sources. Two modes. Pass `node_id` alone for the map: every relation group with its key, label, total, and its first 3 names. Pass `relation` to page one group, where each item comes back with the id that explores it. Read a key off the map rather than guessing — an unknown key returns an empty group, not an error. Best for: expanding a node you already resolved. Resolve a name to a node id with `tako_available_data` first. A metric listed here means the graph tracks it, not that a card exists — `tako_search` is the final check.
| Argument | Type | Description |
|---|---|---|
| q | string | Case-insensitive substring filter on names and aliases, one string per call: "revenue" matches `Total Revenue` and misses `Sales`. Call once per name variant. |
| label | string | NER label to prefer among the related nodes — a boost, not a filter. |
| limit | integer | Page size for a drilled relation. Omit it and the server serves 50. Ignored on the map, where every group returns its first 3 names whatever you pass. |
| cursor | string | Page handle from a previous drilled relation. Omit it for the first page. |
| node_id* | string | Public id of the node to explore, as returned by `tako_available_data` or on a `tako_search` card. |
Search Tako's data graph and the live web in one call: many results at once, as structured cards plus web results, with the top card rendered inline as a chart. It finds data; `tako_contents` fetches it. Each card carries a headline value, node ids, and a url — pass the url to `tako_contents` for rows (`exportable: true` cards) or a web result's full page text. When `exportable` is false the rows are locked — read the headline value from the card's `description`. Website-traffic and SEO cards bill a per-unit data minimum above the search price. Best for: breadth — fan out several narrow queries in parallel. Each query resolves one metric — for one entity, or a comparison set ("Apple revenue", "Nvidia vs AMD gross margin"); several metrics or topics in one query retrieve poorly. To learn what Tako covers, or a metric's canonical name, run `tako_available_data` first, then search on the canonical name it returns.
| Argument | Type | Description |
|---|---|---|
| query* | string | Natural-language search query (e.g. "US GDP growth", "Intel vs Nvidia revenue"). Double-quote a multi-word name to keep it one entity ("tesla motors" club revenue); an unpaired quote disables quoting. Website-traffic data is keyed by domain — query "openai.com monthly visits", not "OpenAI website visits". |
| locale | string | BCP-47 locale tag for language and formatting. Omit it and the server uses en-US. Set it to localize for the user. |
| sources | array | Which corpora to search; default is both. Narrow to ["data"] once `tako_available_data` confirms coverage; narrow to ["web"] only for news or page text — website traffic is in the data graph. |
| country_code |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 10,
"minItems": 1,
"description": "The urls to fetch: a Tako card url or a web result url. One call for 8 urls costs the same as 8 separate calls and saves 7 round trips."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Web pages only: a question the passages should answer. The result holds those passages instead of the page. Omit it to get the whole page."
},
"max_rows": {
"type": "integer",
"maximum": 2000,
"minimum": 1,
"description": "Tako cards only: how many rows to return. Omit it for the whole card, up to 2,000 rows. Every row delivered is billed, so lower it when the recent rows are enough."
},
"max_chars": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "Web pages only: character cap on the extracted text. Inline fetches default to 100,000 per url, less across a batch. Raise it for a long document; `truncated` reports a cut. With `query`, it caps the passages instead: 100 to 20,000, and 4,000 by default."
}
}
}| relation |
| string |
| Relation key to page, taken from the map: metrics, entities, siblings, part_of, members, or a named edge like rel:competes_with. Omit for the map. |
| infer_label | boolean | Detect labels from `q`. Omit it and the server infers them whenever `q` is set. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"node_id"
],
"properties": {
"q": {
"type": "string",
"minLength": 1,
"description": "Case-insensitive substring filter on names and aliases, one string per call: \"revenue\" matches `Total Revenue` and misses `Sales`. Call once per name variant."
},
"label": {
"enum": [
"PERSON",
"ORG",
"GPE",
"LOC",
"PRODUCT",
"EVENT",
"LANGUAGE",
"MONEY",
"METRIC",
"STOCK_TICKER",
"WEBSITE"
],
"type": "string",
"description": "NER label to prefer among the related nodes — a boost, not a filter."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size for a drilled relation. Omit it and the server serves 50. Ignored on the map, where every group returns its first 3 names whatever you pass."
},
"cursor": {
"type": "string",
"minLength": 1,
"description": "Page handle from a previous drilled relation. Omit it for the first page."
},
"node_id": {
"type": "string",
"minLength": 1,
"description": "Public id of the node to explore, as returned by `tako_available_data` or on a `tako_search` card."
},
"relation": {
"type": "string",
"minLength": 1,
"description": "Relation key to page, taken from the map: metrics, entities, siblings, part_of, members, or a named edge like rel:competes_with. Omit for the map."
},
"infer_label": {
"type": "boolean",
"description": "Detect labels from `q`. Omit it and the server infers them whenever `q` is set."
}
}
}| string |
| ISO 3166-1 alpha-2 country code for localized results. Omit it and the server uses US. Set it to localize for the user. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Natural-language search query (e.g. \"US GDP growth\", \"Intel vs Nvidia revenue\"). Double-quote a multi-word name to keep it one entity (\"tesla motors\" club revenue); an unpaired quote disables quoting. Website-traffic data is keyed by domain — query \"openai.com monthly visits\", not \"OpenAI website visits\"."
},
"locale": {
"type": "string",
"description": "BCP-47 locale tag for language and formatting. Omit it and the server uses en-US. Set it to localize for the user."
},
"sources": {
"type": "array",
"items": {
"enum": [
"data",
"web"
],
"type": "string"
},
"default": [
"data",
"web"
],
"minItems": 1,
"description": "Which corpora to search; default is both. Narrow to [\"data\"] once `tako_available_data` confirms coverage; narrow to [\"web\"] only for news or page text — website traffic is in the data graph."
},
"country_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code for localized results. Omit it and the server uses US. Set it to localize for the user."
}
}
}