Tako

Give your agent web search and authoritative datasets: S&P Global, FRED, OECD, SimilarWeb & more.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
100%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~4,384token 数(工具定义)
~10.9 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 3.43%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "tako-mcp": {
      "url": "https://mcp.tako.com/mcp"
    }
  }
}

远程端点

https://mcp.tako.com/mcpstreamable-http

它能做什么

工具清单

工具(4)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢tako_available_data(q, metric, types, label, limit)

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",
  "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."
    },
    "metric": {
      "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": "string",
      "minLength": 2
    },
    "types": {
      "description": "Narrow resolution to one kind, an entity or a metric. Omit to resolve both.",
      "type": "string",
      "enum": [
        "entity",
        "metric"
      ]
    },
    "label": {
      "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`.",
      "type": "string",
      "enum": [
        "PERSON",
        "ORG",
        "GPE",
        "LOC",
        "PRODUCT",
        "EVENT",
        "LANGUAGE",
        "MONEY",
        "METRIC",
        "STOCK_TICKER",
        "WEBSITE"
      ]
    },
    "limit": {
      "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "found": {
      "type": "boolean",
      "description": "Whether Tako holds matching data; `verified` says on what evidence."
    },
    "verified": {
      "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.",
      "type": "string",
      "enum": [
        "coverage",
        "pair",
        "unlinked",
        "resolution"
      ]
    },
    "guidance": {
      "description": "The verdict, and the one next action.",
      "type": "string"
    },
    "matches": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "Canonical graph name — search on this."
          },
          "type": {
            "type": "string",
            "description": "entity or metric; also what `coverage` counts."
          },
          "kind": {
            "type": "string"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "unavailable": {
            "type": "boolean"
          },
          "filter": {
            "description": "The `metric` phrase that narrowed this list. When set, `total` counts only matching entries.",
            "type": "string"
          },
          "coverage": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number",
                "description": "Entries in all, not entries listed."
              },
              "total_capped": {
                "type": "boolean",
                "description": "`total` is a floor."
              },
              "truncated": {
                "description": "More entries exist than are listed.",
                "type": "boolean"
              },
              "items": {
                "description": "Headline-first.",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "Canonical graph name."
                    },
                    "id": {
                      "type": "string",
                      "description": "Graph node id."
                    }
                  },
                  "required": [
                    "name",
                    "id"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "total_capped"
            ],
            "additionalProperties": {}
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "coverage"
        ],
        "additionalProperties": {}
      },
      "description": "The nodes whose coverage was drilled, best first."
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "description": "Canonical graph name — search on this."
          },
          "type": {
            "type": "string",
            "description": "entity or metric; also what `coverage` counts."
          },
          "kind": {
            "type": "string"
          },
          "coverage": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "total_capped": {
                "type": "boolean",
                "description": "`total` is a floor."
              }
            },
            "required": [
              "total",
              "total_capped"
            ],
            "additionalProperties": {}
          }
        },
        "required": [
          "id",
          "name",
          "type"
        ],
        "additionalProperties": {}
      },
      "description": "The other nodes `q` resolved to, best first."
    },
    "next_call": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "tool": {
              "type": "string"
            },
            "query": {
              "type": "string"
            }
          },
          "required": [
            "tool",
            "query"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "A follow-up search in canonical names. Null when no target is unambiguous."
    },
    "entity": {
      "description": "Lookup path: the resolved entity.",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "name"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "metric": {
      "description": "Lookup path: the resolved metric.",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "required": [
            "id",
            "name"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "entity_candidates": {
      "description": "Runners-up.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": false
      }
    },
    "metric_candidates": {
      "description": "Runners-up.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "found",
    "matches",
    "candidates",
    "next_call"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢tako_contents(urls, max_rows, max_chars, query)

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",
  "properties": {
    "urls": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 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."
    },
    "max_rows": {
      "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 2000
    },
    "max_chars": {
      "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": "integer",
      "minimum": 1,
      "maximum": 1000000
    },
    "query": {
      "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.",
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "urls"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The url this entry is for."
          },
          "note": {
            "description": "What the `query` match found.",
            "type": "string"
          },
          "rows": {
            "description": "Tako cards only: the card's data.",
            "type": "object",
            "properties": {
              "columns": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Column names, in row order; the unit is in the name."
              },
              "rows": {
                "type": "array",
                "items": {
                  "type": "array",
                  "items": {}
                },
                "description": "Positional cells; a missing cell is null."
              },
              "total_rows": {
                "description": "Rows behind the card, before `max_rows`.",
                "type": "number"
              }
            },
            "required": [
              "columns",
              "rows"
            ],
            "additionalProperties": false
          },
          "text": {
            "description": "Web pages only: the page text.",
            "type": "string"
          },
          "error": {
            "description": "Why this url alone failed; the others are unaffected.",
            "type": "string"
          },
          "truncated": {
            "description": "Part of this payload was cut.",
            "type": "boolean"
          },
          "source_url": {
            "description": "Where a redirect landed.",
            "type": "string"
          },
          "cost": {
            "type": "number",
            "description": "USD billed for this url."
          }
        },
        "required": [
          "url",
          "cost"
        ],
        "additionalProperties": {}
      },
      "description": "One per requested url, in order."
    },
    "usage": {
      "type": "object",
      "properties": {
        "total_cost_usd": {
          "type": "number"
        }
      },
      "required": [
        "total_cost_usd"
      ],
      "additionalProperties": {},
      "description": "What this request cost."
    }
  },
  "required": [
    "results",
    "usage"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢tako_graph_related(node_id, relation, q, label, infer_label, ...)

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",
  "properties": {
    "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": {
      "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.",
      "type": "string",
      "minLength": 1
    },
    "q": {
      "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.",
      "type": "string",
      "minLength": 1
    },
    "label": {
      "description": "NER label to prefer among the related nodes — a boost, not a filter.",
      "type": "string",
      "enum": [
        "PERSON",
        "ORG",
        "GPE",
        "LOC",
        "PRODUCT",
        "EVENT",
        "LANGUAGE",
        "MONEY",
        "METRIC",
        "STOCK_TICKER",
        "WEBSITE"
      ]
    },
    "infer_label": {
      "description": "Detect labels from `q`. Omit it and the server infers them whenever `q` is set.",
      "type": "boolean"
    },
    "cursor": {
      "description": "Page handle from a previous drilled relation. Omit it for the first page.",
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "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.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "node_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "node": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "description": "entity or metric."
        },
        "name": {
          "type": "string",
          "description": "Canonical graph name — search on this."
        },
        "kind": {
          "type": "string"
        },
        "aliases": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "description": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "type",
        "name"
      ],
      "additionalProperties": {}
    },
    "relations": {
      "description": "Every group, previewed. The map.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "Pass back as `relation` to page it."
          },
          "label": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "total_capped": {
            "type": "boolean",
            "description": "`total` is a floor."
          },
          "next_cursor": {
            "description": "Pass back as `cursor`.",
            "type": "string"
          },
          "preview": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The group's first 3 names."
          }
        },
        "required": [
          "key",
          "label",
          "total",
          "total_capped",
          "preview"
        ],
        "additionalProperties": {}
      }
    },
    "relation": {
      "description": "The one group you drilled.",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "key": {
              "type": "string",
              "description": "Pass back as `relation` to page it."
            },
            "label": {
              "type": "string"
            },
            "total": {
              "type": "number"
            },
            "total_capped": {
              "type": "boolean",
              "description": "`total` is a floor."
            },
            "next_cursor": {
              "description": "Pass back as `cursor`.",
              "type": "string"
            },
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "name"
                ],
                "additionalProperties": {}
              },
              "description": "This page of the group."
            }
          },
          "required": [
            "key",
            "label",
            "total",
            "total_capped",
            "items"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "node"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢tako_search(query, sources, country_code, locale)

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",
  "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\"."
    },
    "sources": {
      "default": [
        "data",
        "web"
      ],
      "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.",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "data",
          "web"
        ]
      }
    },
    "country_code": {
      "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": "string"
    },
    "locale": {
      "description": "BCP-47 locale tag for language and formatting. Omit it and the server uses en-US. Set it to localize for the user.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

输出模式

{
  "type": "object",
  "properties": {
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "description": "Headline value and range — often the answer itself.",
            "type": "string"
          },
          "exportable": {
            "type": "boolean",
            "description": "true → tako_contents on `url` returns the rows; false → rows are locked, read the headline from `description`."
          },
          "url": {
            "description": "The card page — the tako_contents handle.",
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "coverage_end": {
            "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.",
            "type": "string"
          },
          "last_updated": {
            "description": "Date Tako last refreshed this card — NOT where its data ends.",
            "type": "string"
          },
          "total_rows": {
            "description": "Rows behind `url` (exportable cards only).",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "relevance": {
            "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.",
            "type": "string"
          },
          "nodes": {
            "description": "Graph handles — pass ids to tako_graph_related.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "name",
                "type"
              ],
              "additionalProperties": {}
            }
          }
        },
        "required": [
          "exportable"
        ],
        "additionalProperties": {}
      },
      "description": "The data cards. Fetch an exportable card's rows with tako_contents on its url."
    },
    "web_results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "snippet": {
            "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.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "source": {
            "type": "string"
          },
          "published": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "content": {
            "description": "Page text — only when the request asked for it.",
            "type": "object",
            "properties": {},
            "additionalProperties": {}
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": {}
      },
      "description": "Web results."
    },
    "usage": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "total_cost_usd": {
              "type": "number"
            }
          },
          "required": [
            "total_cost_usd"
          ],
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ],
      "description": "Cost-plus usage for this request (null when not metered)."
    },
    "guidance": {
      "description": "Zero-card responses only: what this response is evidence about, and the one next action.",
      "type": "string"
    },
    "metric_definitions": {
      "description": "What each metric means (unit, basis, caveats), keyed by metric name, deduped across cards.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "source_notes": {
      "description": "What each source is and how it builds its data, keyed by source name.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "required": [
    "cards",
    "web_results",
    "usage"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

社区

评价此服务器

证据

最近观测

已验证未记录版本4 个工具
已验证未记录版本4 个工具
已验证未记录版本4 个工具