MCPサーバー

Tako

io.github.TakoData/tako-mcp
データ・分析 検索・リサーチ 公開・接続可能 MCP 2025-11-25

このMCPでできること

Searches the web and structured datasets, explores entity relationships, and retrieves source contents and data rows.

tako_available_data
Tako: Available Data
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'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.'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['found', 'matches', 'candidates', 'next_call'], 'properties': {'found': {'type': 'boolean', 'description': 'Whether Tako holds matching data; `verified` says on what evidence.'}, 'entity': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Lookup path: the resolved entity.'}, 'metric': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Lookup path: the resolved metric.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'type', 'coverage'], 'properties': {'id': {'type': 'string'}, 'kind': {'type': 'string'}, 'name': {'type': 'string', 'description': 'Canonical graph name — search on this.'}, 'type': {'type': 'string', 'description': 'entity or metric; also what `coverage` counts.'}, 'filter': {'type': 'string', 'description': 'The `metric` phrase that narrowed this list. When set, `total` counts only matching entries.'}, 'aliases': {'type': 'array', 'items': {'type': 'string'}}, 'coverage': {'type': 'object', 'required': ['total', 'total_capped'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'id'], 'properties': {'id': {'type': 'string', 'description': 'Graph node id.'}, 'name': {'type': 'string', 'description': 'Canonical graph name.'}}, 'additionalProperties': False}, 'description': 'Headline-first.'}, 'total': {'type': 'number', 'description': 'Entries in all, not entries listed.'}, 'truncated': {'type': 'boolean', 'description': 'More entries exist than are listed.'}, 'total_capped': {'type': 'boolean', 'description': '`total` is a floor.'}}, 'additionalProperties': {}}, 'unavailable': {'type': 'boolean'}}, 'additionalProperties': {}}, 'description': 'The nodes whose coverage was drilled, best first.'}, 'guidance': {'type': 'string', 'description': 'The verdict, and the one next action.'}, 'verified': {'enum': ['coverage', 'pair', 'unlinked', 'resolution'], 'type': 'string', 'description': "What was checked. `pair`: the metric is on the entity's own list. `coverage`: a list was drilled. `unlinked`: the list was checked, the metric is absent. `resolution`: names resolved only."}, 'next_call': {'anyOf': [{'type': 'object', 'required': ['tool', 'query'], 'properties': {'tool': {'type': 'string'}, 'query': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'A follow-up search in canonical names. Null when no target is unambiguous.'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'type'], 'properties': {'id': {'type': 'string'}, 'kind': {'type': 'string'}, 'name': {'type': 'string', 'description': 'Canonical graph name — search on this.'}, 'type': {'type': 'string', 'description': 'entity or metric; also what `coverage` counts.'}, 'coverage': {'type': 'object', 'required': ['total', 'total_capped'], 'properties': {'total': {'type': 'number'}, 'total_capped': {'type': 'boolean', 'description': '`total` is a floor.'}}, 'additionalProperties': {}}}, 'additionalProperties': {}}, 'description': 'The other nodes `q` resolved to, best first.'}, 'entity_candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Runners-up.'}, 'metric_candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Runners-up.'}}, 'additionalProperties': False}
tako_contents
Tako: Fetch Contents
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. If a page is long, such as a filing or an annual report, set `query` to get back only the passages that match. Best for: reading one source in full — a page you need to quote, or the rows behind a card you need to compute over.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'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: return the passages around matches of this phrase instead of the whole page. The full page is always scanned, so no match means the phrase isn't there."}, '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.'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results', 'usage'], 'properties': {'usage': {'type': 'object', 'required': ['total_cost_usd'], 'properties': {'total_cost_usd': {'type': 'number'}}, 'description': 'What this request cost.', 'additionalProperties': {}}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'cost'], 'properties': {'url': {'type': 'string', 'description': 'The url this entry is for.'}, 'cost': {'type': 'number', 'description': 'USD billed for this url.'}, 'note': {'type': 'string', 'description': 'What the `query` match found.'}, 'rows': {'type': 'object', 'required': ['columns', 'rows'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'array', 'items': {}}, 'description': 'Positional cells; a missing cell is null.'}, 'columns': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Column names, in row order; the unit is in the name.'}, 'total_rows': {'type': 'number', 'description': 'Rows behind the card, before `max_rows`.'}}, 'description': "Tako cards only: the card's data.", 'additionalProperties': False}, 'text': {'type': 'string', 'description': 'Web pages only: the page text.'}, 'error': {'type': 'string', 'description': 'Why this url alone failed; the others are unaffected.'}, 'truncated': {'type': 'boolean', 'description': 'Part of this payload was cut.'}, 'source_url': {'type': 'string', 'description': 'Where a redirect landed.'}}, 'additionalProperties': {}}, 'description': 'One per requested url, in order.'}}, 'additionalProperties': False}
tako_graph_related
Tako: Graph Related
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'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.'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['node'], 'properties': {'node': {'type': 'object', 'required': ['id', 'type', 'name'], 'properties': {'id': {'type': 'string'}, 'kind': {'type': 'string'}, 'name': {'type': 'string', 'description': 'Canonical graph name — search on this.'}, 'type': {'type': 'string', 'description': 'entity or metric.'}, 'aliases': {'type': 'array', 'items': {'type': 'string'}}, 'description': {'type': 'string'}}, 'additionalProperties': {}}, 'relation': {'anyOf': [{'type': 'object', 'required': ['key', 'label', 'total', 'total_capped', 'items'], 'properties': {'key': {'type': 'string', 'description': 'Pass back as `relation` to page it.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'kind': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': {}}, 'description': 'This page of the group.'}, 'label': {'type': 'string'}, 'total': {'type': 'number'}, 'next_cursor': {'type': 'string', 'description': 'Pass back as `cursor`.'}, 'total_capped': {'type': 'boolean', 'description': '`total` is a floor.'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'The one group you drilled.'}, 'relations': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'label', 'total', 'total_capped', 'preview'], 'properties': {'key': {'type': 'string', 'description': 'Pass back as `relation` to page it.'}, 'label': {'type': 'string'}, 'total': {'type': 'number'}, 'preview': {'type': 'array', 'items': {'type': 'string'}, 'description': "The group's first 3 names."}, 'next_cursor': {'type': 'string', 'description': 'Pass back as `cursor`.'}, 'total_capped': {'type': 'boolean', 'description': '`total` is a floor.'}}, 'additionalProperties': {}}, 'description': 'Every group, previewed. The map.'}}, 'additionalProperties': False}
tako_search
Tako: Search
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`. 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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'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.'}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['cards', 'web_results', 'usage'], 'properties': {'cards': {'type': 'array', 'items': {'type': 'object', 'required': ['exportable'], 'properties': {'url': {'type': 'string', 'description': 'The card page — the tako_contents handle.'}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'type'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'type': {'type': 'string'}}, 'additionalProperties': {}}, 'description': 'Graph handles — pass ids to tako_graph_related.'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'relevance': {'type': 'string', 'description': 'Either a 1.0-5.0 score as a string ("4.5", 5.0 = exact match) on entitled accounts, or a coarse word ("High"). Higher is more relevant in both forms.'}, 'exportable': {'type': 'boolean', 'description': 'true → tako_contents on `url` returns the rows; false → rows are locked, read the headline from `description`.'}, 'total_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Rows behind `url` (exportable cards only).'}, 'description': {'type': 'string', 'description': 'Headline value and range — often the answer itself.'}, 'coverage_end': {'type': 'string', 'description': 'Where the DATA ends — use this, not `last_updated`, to judge whether a figure is current. Reduced ISO precision at the series\' own granularity ("2026", "2026-06", "2026-06-30"), and it can be in the future on a card with projections.'}, 'last_updated': {'type': 'string', 'description': 'Date Tako last refreshed this card — NOT where its data ends.'}}, 'additionalProperties': {}}, 'description': "The data cards. Fetch an exportable card's rows with tako_contents on its url."}, 'usage': {'anyOf': [{'type': 'object', 'required': ['total_cost_usd'], 'properties': {'total_cost_usd': {'type': 'number'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Cost-plus usage for this request (null when not metered).'}, 'guidance': {'type': 'string', 'description': 'Zero-card responses only: what this response is evidence about, and the one next action.'}, 'web_results': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'content': {'type': 'object', 'properties': {}, 'description': 'Page text — only when the request asked for it.', 'additionalProperties': {}}, 'snippet': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Passages selected against the query. A ' … ' marks a discontinuity — joined passages or the page's own ellipsis — so never quote across it as one sentence. null → no relevant passage, url still fetchable."}, 'published': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': {}}, 'description': 'Web results.'}, 'source_notes': {'type': 'object', 'description': 'What each source is and how it builds its data, keyed by source name.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'metric_definitions': {'type': 'object', 'description': 'What each metric means (unit, basis, caveats), keyed by metric name, deduped across cards.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'additionalProperties': False}
追加
tako_search
2026年9月17日12:52
追加
tako_graph_related
2026年9月17日12:52
追加
tako_contents
2026年9月17日12:52
追加
tako_available_data
2026年9月17日12:52