关于 Index Agentica
Index Agentica 是面向 Agent 和用户的公开目录搜索服务,可查找工具、MCP 服务、API、协议与技能。其远程无状态服务无需身份验证,并提供目录条目和长篇指南。
主要功能
- 01搜索目录条目与指南
- 02获取完整条目详情
- 03读取指南、比较、技术栈和技能
- 04浏览分类
- 05请求收录目录条目
适用场景
- 01为任务查找 MCP 服务
- 02比较工具和 Agent 技术栈
- 03获取技能或长篇指南
- 04提交项目以供目录收录
MCP 相关
提供远程 Streamable HTTP MCP 服务,支持搜索、获取条目与内容、列出分类及提交收录请求。服务无需身份验证,除提交收录请求外均为只读。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.indexagentica.com/mcpclaude mcp add --transport http com-indexagentica https://mcp.indexagentica.com/mcp{"mcpServers":{"com-indexagentica":{"type":"http","url":"https://mcp.indexagentica.com/mcp"}}}在 Cursor 中打开{"servers":{"com-indexagentica":{"type":"http","url":"https://mcp.indexagentica.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"com-indexagentica":{"type":"http","url":"https://mcp.indexagentica.com/mcp"}}}{"mcpServers":{"com-indexagentica":{"serverUrl":"https://mcp.indexagentica.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
5| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tags | array | 否 | 可选的标签 slug 列表;结果必须包含所有这些标签(例如,["open-source", "python"])。 |
| type | enum | 否 | 可选的结果类型:entry(目录条目)、guide、comparison、stack、skill 或 all(默认)。entry | guide | comparison | stack | skill | all |
| limit | integer | 否 | 结果数量上限(1–50,默认 10)。 |
| query | string | 否 | 自由文本搜索词,例如 "browser automation" 或 "payments x402"。指定了 category 或 tags 时可以为空。 |
| category | string | 否 | 可选的条目类别 slug,用于限制结果范围(同时隐含 type 为 entry)。当前类别:skills、harnesses、mcp-servers、tools、protocols、apis、information、finance-payments、directories、infrastructure、evals-observability。 |
详细介绍
indexagentica-mcp
远程 MCP 服务(Streamable HTTP)和 REST 搜索 API,适用于
Index Agentica,这是一个以 Agent 为先的技能、
harness、MCP 服务、工具、协议和 API 目录,还提供长篇指南、
对比、技术栈和可下载的 Agent Skills。运行于 Cloudflare Workers
(免费计划),无状态、不使用 Durable Objects、无需身份验证、开放 CORS。除
request_listing / POST /v1/requests 外均为只读;这两项会将目录收录申请加入队列,供 Curator 审核(D1)。
**自托管:**请参阅 SELF_HOSTING.md,了解如何从全新克隆开始运行自己的副本(模板配置、自有 KV/D1、自有数据镜像、本地和远程冒烟测试)。wrangler.toml 和 DEPLOY.md 是维护者自己的部署配置。
安装
远程服务:无需安装,无需 API 密钥。Streamable HTTP 地址为 https://mcp.indexagentica.com/mcp(已上线)。
claude mcp add --transport http indexagentica https://mcp.indexagentica.com/mcp
其他客户端:将该 URL 添加为无需身份验证的 Streamable HTTP 服务(参阅 llms-install.md)。
同一个 Worker 也可通过 https://indexagentica-mcp.indexagentica.workers.dev/mcp
响应请求(参阅 DEPLOY.md)。
端点
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /mcp | MCP Streamable HTTP 端点(JSON-RPC 2.0,JSON 响应) |
| GET/DELETE | /mcp | 405(没有独立的 SSE 流,也没有会话) |
| GET | / | JSON 自述信息,包含 MCP 端点、REST、llms.txt 和文档的链接 |
| GET | /search?q=&type=&category=&tags=a,b&limit= | 对条目和长篇内容进行排名搜索(type:entry、guide、comparison、stack、skill 或 all(默认);category 适用于条目;limit 为 1-50,默认 10;tags 按 AND 关系匹配) |
| GET | /entries/<id>(或 <id>.json) | 单个完整条目;404 响应包含 suggestions |
| GET | /entries | 所有 ID |
| GET | /content/<type>/<id>(或 <id>.json) | 单篇指南、比较、技术栈或技能:元数据 + Markdown(?include_html=1 会添加 HTML);404 响应包含 suggestions |
| GET | /content?type= | 已发布的长篇内容(元数据) |
| GET | /categories | 分类及其计数 |
| GET | /openapi.json | REST API 的 OpenAPI 3.1 规范 |
| GET | /.well-known/mcp/server-card.json | 静态服务卡片(Smithery 扫描回退):serverInfo、authentication: {required: false}、与 tools/list 相同的 tools,以及空的 resources/prompts |
| GET | /stats | 公开使用统计信息(JSON):网站页面浏览量、外部链接点击量、技能下载量、按工具统计的 MCP 工具调用次数、REST 请求数、Agent/人工用户比例;包含最近 24 小时、最近 7 天以及自 since 时间戳以来的全部数据。缓存 10 分钟。参见使用统计 |
| GET | /v1/usage | /stats 的别名(供网站使用;较不容易被内容拦截器过滤规则拦截) |
| POST | /v1/e | /hit 的别名(供网站使用) |
| GET, HEAD | /skills/{id}.zip, /skills/{id}/SKILL.md | 直接下载技能:记录一次下载,然后 302 重定向到 indexagentica.com 上的静态文件。未知 ID 返回 404。参见直接下载技能 |
| POST | /hit | 来自 indexagentica.com 内联脚本的网站使用情况信标(检查来源、严格验证,返回 204)。参见网站信标 |
| POST | /v1/requests | 请求添加条目(逻辑与 request_listing 工具相同)。JSON 请求体 {wanted, category, url?, reason?, requester?};新增返回 201,合并返回 200。参见条目请求 |
| GET | /v1/requests?status=&limit= | 公开的最常请求列表(已清理;已拒绝的请求不公开;仅已验证/已列出的请求包含 url) |
| GET | /v1/requests/admin?status= | 管理员:完整队列(Bearer REQUESTS_ADMIN_TOKEN) |
| POST | /v1/requests/<id>/status | 管理员:{status, entry_id?, note?} 或 {delete: true}(Bearer 令牌) |
| GET | /v1/admin/tool-calls?hours=48 | 管理员:按请求的工具名称和客户端统计非 tools/call 调用次数,包括未知名称(Bearer 令牌;不计入 /stats) |
| GET | /health | 存活状态(不受速率限制) |
错误始终以 JSON 返回:{"error":{"status":400,"code":"bad_request","message":"..."}}
(代码:bad_request、not_found、method_not_allowed、rate_limited、upstream_error)。
MCP 工具
| 工具 | 输入 | 输出(structuredContent) |
|---|---|---|
search | query(字符串)、type?(entry|guide|comparison|stack|skill|all,默认 all)、category?(slug;仅限条目)、tags?(字符串数组,必须全部匹配)、limit?(1-50) | {query, type, category?, tags, limit, total, results[]};每个结果包含 type, id, name, summary, url, tags, score, links,以及 category(条目)或 author, last_verified, entries(长篇内容) |
get_entry | id(kebab-case) | {entry}(完整条目,遵循条目架构,并包含 links 和 longform 反向引用) |
get_content | type(guide|comparison|stack|skill)、id、include_html? | {content}:前置元数据、元数据、markdown(将 scheme 链接解析为绝对 URL)、links;比较内容附带 comparison(标准、表格、结论),技术栈附带 stack(用例、组件),技能附带 skill_md(完整的 SKILL.md)和 links.zip / links.skill_md |
list_categories | 无 | {total, generated, categories[{slug,name,description,count,html,json}]} |
request_listing | wanted(≤120)、category(类别 slug 或 other)、url?(http(s),≤300)、reason?(≤500)、requester?(≤60) | {ok, id, merged, vote_counted, request{id,wanted,category,votes,status,first_seen,last_seen}, note, list}。唯一非只读工具(readOnlyHint: false,不会造成破坏) |
每个工具都有一个 JSON-Schema inputSchema、一个 outputSchema、readOnlyHint
注解,并会同时返回 structuredContent 和内容块中的同一 JSON 文本。参数无效或 ID 未知时,
会返回 isError: true 的工具结果(以便模型自行纠正);工具名称未知时,会返回 JSON-RPC -32602,
其消息会列出有效工具;若存在明显匹配项(客户端命名空间前缀,例如
mcp__indexagentica__search;同义词,例如 search_index/find;编辑距离不超过 2 的拼写错误),
则会提供建议:error.data = {requested, valid_tools, suggestion?}。
建议不会被执行。显式别名(src/tools.js 中的 TOOL_ALIASES)仅为观察到真实客户端调用的无歧义名称
添加,不会在 tools/list 中公布;日志会记录最初请求的名称(detail = alias:<tool>)。
评分:对每个查询词,ID/名称完全匹配得 12 分,ID 片段得 6 分,名称子串得 5 分, 标签完全匹配得 4 分(部分匹配得 2 分),摘要得 2 分,类别得 1.5 分,描述得 1 分。如果名称中包含 整个短语,则加 8 分;最终得分乘以匹配词数所占比例。
协议支持(双时代、无状态)
-
2026-07-28(当前规范,“现代版”):无需握手。每个 POST 都携带
_meta["io.modelcontextprotocol/protocolVersion"]和MCP-Protocol-Version、Mcp-Method标头(对于tools/call,还支持Mcp-Name和 base64 哨兵标头)。 服务会根据请求正文验证标头(-32020 HeaderMismatch),对未知版本返回-32022和supported列表,实现server/discover,返回resultType: "complete",在结果_meta中返回serverInfo,并在tools/list和server/discover上提供ttlMs/cacheScope缓存提示。未知方法 -> HTTP 404 +-32601。 -
2025-11-25 / 2025-06-18 / 2025-03-26(“旧版”):会响应
initialize(协商版本,无法协商时回退到 2025-11-25)、notifications/initialized-> 202、ping、tools/list、tools/call;接受 2025-03-26 批量请求。绝不会签发Mcp-Session-Id,因此每个请求彼此独立,任意 Worker 隔离实例都可以处理。 -
响应始终为
application/json(绝不使用 SSE)。Origin会根据ALLOWED_ORIGINS检查(默认值为*,因为数据公开且只读)。
规范参考:Streamable HTTP 2026-07-28, 版本控制 / 双时代, server/discover。
数据与缓存
数据源是已发布的静态站点:同时获取 GET https://indexagentica.com/api/index.json
(所有条目和分类)和 GET /api/longform.json(长文元数据);如果无法加载长文索引,条目仍可正常使用。get_content
会按需从 DATA_BASE_URL 获取 /api/longform/<route>/<id>.json(使用相同的缓存)。Worker 会将索引保存在隔离实例内存中,缓存时间为
CACHE_TTL_SECONDS(600 s),也会将其存入 Cloudflare Cache API(在自定义域名上生效;在 workers.dev 上为空操作),合并并发刷新请求,并在上游获取失败时提供过期副本。站点构建新增的分类会自动显示。不会在任何位置写入数据。
使用情况日志记录(Workers Analytics Engine)
每个请求(OPTIONS、/health、/robots.txt、/favicon.ico、/hit、/stats 除外)都会向 Analytics Engine 数据集 indexagentica_mcp(wrangler.toml 中的绑定 ANALYTICS)写入一个数据点,以便我们按工具和客户端统计 Agent 使用情况。如果缺少此绑定(本地测试、ratelimit-test 环境),日志记录不会执行,写入失败也不会影响响应。Workers Free 每天包含 100,000 个写入的数据点(定价);数据保留 3 个月(限制)。
| 列 | 字段 | 说明 |
|---|---|---|
index1 | <route>:<tool or method or endpoint> | 例如:mcp:search、rest:get_entry |
blob1 | route | mcp 或 rest |
blob2 | endpoint | 标准化后的值:/mcp、/search、/entries/{id}、/content/{type}/{id}、……、other |
blob3 | JSON-RPC method | initialize、tools/call、batch、……(仅限 MCP) |
blob4 | tool | MCP 工具名称,或对应的 REST 工具(search、get_entry、get_content、list_content、list_categories) |
blob5、blob6 | 客户端名称、版本 | 来自 initialize 的 clientInfo 或 2026-07-28 的 _meta["io.modelcontextprotocol/clientInfo"];分别截断为 64/32 个字符 |
blob7 | User-Agent | 截断为 128 个字符 |
blob8、blob9 | 协议版本、时期 | modern / legacy |
blob10 | 结果 | ok、error(HTTP ≥ 400、JSON-RPC 错误或 isError 工具结果)、rate_limited |
blob11 | 详情 | JSON-RPC 错误代码、tool_error 或 HTTP 状态码 |
blob12、blob13 | 国家/地区、colo | 来自 request.cf |
blob14、blob15、blob16 | 类型筛选器、类别筛选器、目标 ID | 仅接受 kebab-case 值(公开目录中的 slug/ID);其他值均存储为 invalid |
blob17 | UA 类别 | human(主流浏览器的 User-Agent)或 agent(其他所有情况:MCP 客户端、SDK、curl、爬虫、无头浏览器);参见 src/ua.js。于 2026-10-03 添加;更早的行会在查询时根据 blob7 分类 |
blob18 | 流量 | internal(我们自己的测试/Agent,参见内部流量)或 outside;2026-10-12 之前为空 |
blob19 | 内部规则 | header、ua 或 ip(外部流量为空) |
double1 | HTTP 状态码 | |
double2 | 延迟(毫秒) | Worker 内部的耗时(Workers 的时钟会在 I/O 期间前进) |
double3 | ASN | 来自 request.cf.asn(网络,而非个人) |
double4 | 结果数量 | 搜索 total |
double5、double6 | 查询长度(字符数、单词数) |
**隐私:**不记录 IP 地址、搜索查询文本、工具参数中的自由文本、Cookie 或令牌(服务端没有这些信息);对于站点信标,也不记录来源页、查询字符串或客户端标识符。客户端仅通过其自行报告的名称/版本和截断后的 User-Agent 进行识别。示例查询(SQL API):
SELECT blob4 AS tool, blob5 AS client, SUM(_sample_interval) AS requests FROM indexagentica_mcp WHERE timestamp > NOW() - INTERVAL '1' DAY GROUP BY tool, client ORDER BY requests DESC。
网站信标(POST /hit)
indexagentica.com 的每个页面都包含一段小型内联脚本(不使用 Cookie、localStorage、标识符或第三方代码)。如果设置了 navigator.webdriver,或者浏览器发送了 Do Not Track 或 Global Privacy Control 信号,则会跳过该脚本。脚本使用 navigator.sendBeacon 发送数据(类型为 text/plain,因此不会触发 CORS 预检):
| 事件 | 请求体 | 触发时机 |
|---|---|---|
| 页面浏览 | {"t":"pageview","p":"/entries/x402/"} | 页面加载时;p 是页面的规范路径(无查询字符串、无引荐来源) |
| 外链点击 | {"t":"click","p":"/entries/x402/","id":"x402","h":"www.x402.org"} | 在条目页面点击列表项的网站/仓库/文档/来源链接时 |
| 下载 | {"t":"download","p":"/skills/<id>/","id":"<id>","k":"zip"|"skill_md"} | 点击技能 ZIP 或原始 SKILL.md 链接时 |
网站会向 mcp.indexagentica.com 上的别名 /v1/e 发送请求;如果失败,则回退到 indexagentica-mcp.indexagentica.workers.dev 上的同一路径(同一个 Worker,执行相同的检查)。Worker 仅接受 Origin: https://indexagentica.com(HIT_ORIGINS)、不超过 512 字节的请求体、字段完全匹配的三种事件类型、属于网站已发布页面集合的 p、已发布索引中存在的 id,以及条目实际链接到的主机。其他请求均会返回 400,且不会被存储。/hit 有独立的速率限制计数器(每个 IP 同样为 120 次/分钟)。已接受的点击数据会写入单独的数据集 indexagentica_hits(绑定项 HITS),索引为 hit:<event>:
| 列 | 字段 |
|---|---|
blob1 | 事件:pageview、click、download |
blob2 | 页面路径 |
blob3 | 条目或技能 id(click、download) |
blob4 | 目标主机(click) |
blob5 | 下载类型:zip、skill_md |
blob6 | UA 类别(human/agent) |
blob7 | 国家/地区(来自 request.cf) |
blob8 | 流量:internal/outside(2026-10-12 之前为空) |
blob9 | 内部流量规则:header、ua、ip |
blob10 | 探测类型(仅限事件 direct):已计入的下载为空,或为 head、bot |
double1 | 1 |
直接下载技能(GET /skills/<id>)
Agent 使用 curl 获取技能,不会运行网站信标,因此面向 Agent 发布的下载链接(llms.txt、llms-full.txt、/api/longform*.json、MCP get_content 链接)会指向此主机:https://mcp.indexagentica.com/skills/<id>.zip 和 https://mcp.indexagentica.com/skills/<id>/SKILL.md。Worker(src/downloads.js)会根据 ^[a-z0-9]+(-[a-z0-9]+)*$(最多 64 个字符)检查 <id>,并验证它是否属于网站 /api/longform.json 中已发布的技能(缓存 10 分钟);其他请求均会返回 404,且 Location 始终由 DATA_BASE_URL 构建,因此不会形成开放重定向。Worker 会向 indexagentica_hits 写入一行数据(事件 direct,索引 hit:direct,字段相同;blob2 为请求路径),并返回 302 和 Cache-Control: no-store。HEAD 请求以及爬虫/链接检查器/监控器 User-Agent(BOT_UA_RE)会以 blob10 = head/bot 的形式存储,并报告为 site.direct_downloads.crawlers_and_probes,而不计为下载。内部流量照常标记。该路由有独立的速率限制计数器(dl:);超过限制后重定向仍会正常工作,但请求不会被记录。网站自身 HTML 中的下载按钮仍链接到静态文件,并通过点击信标计数(site.downloads);site.skill_downloads = 点击次数 + 直接下载次数。
使用统计数据(GET /stats)
通过 Analytics Engine SQL API,使用密钥 CF_ANALYTICS_TOKEN(Account Analytics Read)和 CF_ACCOUNT_ID 聚合两个数据集。计数方式为 SUM(_sample_interval)。统计窗口:last_24h、last_7d(滚动窗口)和 all_time。由于 Analytics Engine 只保留 3 个月的数据,每日 cron(30 0 * * *)会将每个已结束 UTC 日期的总数存入 Workers KV(STATS_KV,键为 day:YYYY-MM-DD);all_time = 已存储日期的总数 + 从尚未存储的第一个日期起进行的实时查询(/stats 也会延迟补齐缺失日期)。since.mcp_api(STATS_API_SINCE,首次部署请求日志记录时)和 since.site_beacon(STATS_BEACON_SINCE,部署信标时)标明计数的起始时间;更早的数据不会估算或回填。仅公布服务自身的工具名称(其他名称均为 unknown_tool)。响应缓存 10 分钟(Cache API + 内存,Cache-Control: public, max-age=600)。没有令牌时,端点会返回 {"status":"collecting", ...},不包含数字;如果 SQL API 失败,则返回 503 {"status":"unavailable"}。
每个统计窗口只统计外部流量,并包含:site.downloads.by_skill、site.direct_downloads(总计、zip、skill_md、by_skill、crawlers_and_probes)、site.skill_downloads(总计 = 点击次数 + 直接下载次数,整体及每个技能均为 {total, clicks, direct})、site.outbound_clicks_by_entry、mcp.top_clients(自报的 MCP 客户端名称,转换为小写并剔除 [a-z0-9._ -] 以外的字符,前 10 名,且仅包含出现次数 ≥ 3 的名称)、top_user_agent_families(机器人名称、browser、headless-chrome 或第一个产品标记;前 10 名,出现次数 ≥ 3)以及 internal_excluded(按规则排除的内容)。KV 日期数据带有汇总版本号(v);在原始数据仍保留期间,会重新计算旧版本日期的数据,因此规则变更会追溯生效。延迟补齐每次 /stats 调用最多重新计算 2 天,cron 每次运行最多重新计算 5 天(每天约需 7 个 SQL 子请求;Workers Free 允许 50 个)。
内部流量
我们自己的测试、监控和 Agent 会记录,但会从 /stats 中排除。若请求或信标符合任一规则(src/internal.js),即视为内部流量:
| 规则 | 匹配条件 |
|---|---|
header | X-Indexagentica-Internal: 1(CORS 允许此标头;test/e2e.mjs 会在每个请求中发送它) |
ua | User-Agent 包含 indexagentica(我们的客户端使用 indexagentica-<agent>/1) |
ip | 客户端 IP 位于可选密钥 INTERNAL_IPS 列出的 CIDR 范围内(以逗号分隔,支持 IPv4/IPv6)。未设置时:我们的共享服务器通过共享中继范围内的轮换地址出口,因此 IP 规则也会排除陌生人的流量 |
在标记存在之前(2026-10-12)记录的行,会在 SQL 中根据我们自己会话的特征进行追溯匹配(src/stats.js 中的 API_RETRO / HITS_RETRO):API 行中 MCP 客户端名称为 e2e(我们的测试套件)的记录,或来自美国且 User-Agent 为 curl/node/python/headless-Chrome、时间处于记录在案的启动和验证时段(2026-10-02 20:15–20:45 和 2026-10-03 04:55–05:50 UTC)的记录,以及 2026-10-03 05:00 至 05:50 UTC 期间来自美国的站点信标。这只能尽力而为:看起来像外部流量的内部会话仍可能被计入,而这些时段内使用相同通用客户端的外部请求则会被排除。
我们的 Agent 应这样调用服务:
curl -H 'X-Indexagentica-Internal: 1' -A 'indexagentica-steward/1' https://mcp.indexagentica.com/stats
速率限制
- 默认值:每个客户端 IP、每个 Cloudflare 位置每 60 秒 120 个请求,通过
Workers 速率限制绑定
(
wrangler.toml中的[[ratelimits]],自 2025 年 9 月起正式发布;周期必须为 10 或 60 秒)。 此机制有意采用近似值(最终一致,按位置计算)。 - 如果绑定不存在或发生错误,则改用每个 isolate 的令牌桶,数值相同
(
RATE_LIMIT_REQUESTS/RATE_LIMIT_PERIOD_SECONDS)。 - 超出限制时会返回带有
Retry-After的 HTTP 429;在/mcp上,响应正文是 JSON-RPC 错误(-32000),其他路径则使用 JSON 错误封套。/health和OPTIONS不计入限制。响应包含x-ratelimit-limit/x-ratelimit-period。 - 请注意免费计划的上限:Workers Free 每个账户每天允许 100,000 个请求, 每个请求的 CPU 时间为 10 ms(限制)。 冷搜索约消耗 1-3 ms CPU(解析约 135 KB 的索引);热请求远低于 1 ms。
本地开发与测试
npm install
npm run dev # wrangler dev on http://127.0.0.1:8787 (no Cloudflare login needed)
npm test # unit tests + 2x wrangler dev + E2E (REST, MCP both eras, rate limit) + MCP Inspector CLI
npm run test:unit # pure unit tests (no network)
BASE=https://<deployed-host> npm run test:e2e # E2E against any deployment
DATA_BASE_URL=http://127.0.0.1:8089 npm test # point the local Workers at another copy of the site
完整的 E2E 检查会根据数据情况调整:存在已发布条目时,会通过 REST 和 MCP
分别获取每种类型的一个条目;没有已发布条目时(全部为草稿),则检查空列表和
未找到路径。如需在发布任何内容前测试完整流程,请构建包含已发布草稿的站点
(例如,在站点仓库中运行 INCLUDE_DRAFTS=1 SITE_URL=http://127.0.0.1:8089 node scripts/build.mjs),
在该端口提供 dist/,并设置 DATA_BASE_URL 后运行 npm test。
scripts/test-local.sh 会在 :8797 启动常规 Worker,并在 :8798 启动低限制副本
(--env ratelimit-test,每 10 秒 5 个请求),运行 test/e2e.mjs,然后使用
@modelcontextprotocol/inspector --cli 检查服务器,分别采用默认的 legacy era 和
固定为 modern era 的配置(protocolEra: "modern")。
手动检查:
npx mcp-inspector --cli http://127.0.0.1:8787/mcp --transport http --method tools/list
npx mcp-inspector --cli http://127.0.0.1:8787/mcp --transport http --method tools/call \
--tool-name search --tool-args-json '{"query":"browser automation","limit":3}'
curl -s http://127.0.0.1:8787/mcp -H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_entry","arguments":{"id":"x402"}}}'
连接客户端
claude mcp add --transport http indexagentica https://mcp.indexagentica.com/mcp
JSON 配置(例如 Claude Code 的 .mcp.json;Claude Code 要求远程服务使用 "type": "http"):
{ "mcpServers": { "indexagentica": { "type": "http", "url": "https://mcp.indexagentica.com/mcp" } } }
其他客户端对 Streamable HTTP 使用各自的名称(Cline:"type": "streamableHttp";有些只接受 "url")。
配置(wrangler.toml [vars])
| 变量 | 默认值 | 含义 |
|---|---|---|
DATA_BASE_URL | https://indexagentica.com | 获取 /api/index.json 的地址 |
CACHE_TTL_SECONDS | 600 | 内存 / Cache API TTL |
RATE_LIMIT_REQUESTS, RATE_LIMIT_PERIOD_SECONDS | 120, 60 | 文档所述的限制 + 回退令牌桶(与 [ratelimits.simple] 保持一致) |
ALLOWED_ORIGINS | * | 以逗号分隔的浏览器调用方 Origin 允许列表 |
PUBLIC_BASE_URL | 请求来源 | GET / 中链接的规范基址 |
CF_ACCOUNT_ID | (无) | Analytics Engine SQL API(/stats)所用账户 |
STATS_API_SINCE, STATS_BEACON_SINCE | 2026-10-02T20:21:47Z, (部署时间) | MCP/REST 和站点信标计数的起始时间(在 /stats 中显示为 since) |
INTERNAL_IPS(密钥,可选) | (无) | 以逗号分隔的 CIDR,请求计为内部流量 |
HIT_ORIGINS | https://indexagentica.com,https://www.indexagentica.com | 允许向 POST /hit 发送请求的来源 |
密钥:CF_ANALYTICS_TOKEN(Account Analytics Read),使用 wrangler secret put CF_ANALYTICS_TOKEN 设置。
绑定:ANALYTICS 和 HITS(Analytics Engine)、STATS_KV(KV)、RATE_LIMITER;cron 30 0 * * *。
部署
如需运行自己的副本,请按照 SELF_HOSTING.md 操作。DEPLOY.md
包含我们为 mcp.indexagentica.com 编写的部署说明(所需选项以及确切的 Cloudflare/GoDaddy
访问权限)。简而言之,我们的部署方式如下:
export CLOUDFLARE_ACCOUNT_ID=... # from the Cloudflare dashboard
export CLOUDFLARE_API_TOKEN=... # custom token, permissions in DEPLOY.md
npm run deploy:dry # build only
npm run deploy # -> https://mcp.indexagentica.com (custom domain)
# + https://indexagentica-mcp.indexagentica.workers.dev
BASE=https://mcp.indexagentica.com npm run test:e2e
列表请求
Agent 可通过 request_listing 工具或 POST /v1/requests 请求添加缺失的列表项(共用代码:src/requests.js)。
存储:Cloudflare D1 数据库 indexagentica-requests(绑定 REQUESTS_DB,架构位于 migrations/;使用
CI=1 npx wrangler d1 migrations apply indexagentica-requests --remote 应用迁移)。
- 验证:
wanted≤120 个字符,reason≤500 个字符,requester≤60 个字符,url≤300 个字符且仅允许 http(s)(不得包含凭据或空白字符); 拒绝控制字符和双向文本覆盖字符;拒绝未知字段;请求正文 ≤4 KiB;category必须是当前类别 slug 或other。 - 去重:相同的
category和相同的规范化wanted(转为小写,去除重音符号和标点,合并空白字符, 去除 mcp/server/the/tool/skill/api 等填充词),或相同的 URL 主机名+路径(任意类别)→ 合并到现有请求中。 合并时增加一票,每个客户端最多一票(IP 哈希,IPv6 按 /64)。最多保留 10 条原因和请求者姓名(仅限管理员视图)。 - 速率限制:每个客户端每小时 5 次、每天 20 次(以 IP(IPv6 按 /48)+ User-Agent 的 HMAC 为键),每个 IP 哈希每天 20 次;超限时返回
429和Retry-After。 此外还有全局每分钟 120 次的限制。提交记录会在 2 天后清除。 - 隐私:绝不存储原始 IP,仅存储使用密钥
REQUESTS_IP_SALT计算的 HMAC-SHA256(截断后)。 - 状态:
pending→verified→listed(带有entry_id),或rejected。公开输出(GET /v1/requests)会隐藏已拒绝的条目, 不包含原因/请求者信息,且仅对已验证/已列出的条目包含url。来自我们自有 Agent 的请求会标记为internal(管理员视图)。 - 内容维护者:管理路由需要
Authorization: Bearer <REQUESTS_ADMIN_TOKEN>(密钥;仅在共享机器上保留本地副本,绝不提交)。 网站仓库包含scripts/requests-review.mjs(列出 / 验证 / 标记为已列出 / 拒绝 / 删除)以及content/README.md中的工作流。 未经验证的内容不会列出。
布局
src/index.js router, CORS, JSON errors, REST endpoints, rate-limit gate
src/mcp.js stateless dual-era MCP JSON-RPC handler
src/tools.js tool definitions (schemas) + implementations shared with REST
src/search.js scoring / filtering
src/data.js fetch + cache of /api/index.json
src/ratelimit.js Workers rate limiting binding + in-isolate fallback
src/openapi.js OpenAPI document for the REST API
src/analytics.js per-request usage logging to Workers Analytics Engine (no-op without the binding)
src/ua.js human (browser) vs agent User-Agent classification
src/hits.js POST /hit: site beacon validation + logging (dataset indexagentica_hits)
src/downloads.js GET/HEAD /skills/<id>.zip|SKILL.md: direct download count + 302 to the site
src/stats.js GET /stats: Analytics Engine SQL aggregation, KV daily rollup (cron), caching
src/internal.js internal-traffic rules (header, UA, optional IP ranges)
src/requests.js listing requests: validation, dedupe, votes, rate limits, D1 queue, admin
migrations/ D1 schema for indexagentica-requests
test/ unit tests, E2E script, Inspector config
docs/ proposed copy for llms.txt, /agents and the directory listing
许可证:代码采用 MIT 许可证;目录内容采用 CC BY 4.0 许可证。
注册表元数据
server.json:官方 MCP Registry 条目(com.indexagentica/mcp,架构 2025-12-11),使用mcp-publisher validate验证。发布时使用 HTTP 域名验证,通过https://indexagentica.com/.well-known/mcp-registry-auth;端点上线后,需单独手动完成此步骤。glama.json:Glama 所有权声明(维护者Drudley)。llms-install.md:供 Cline 等由 Agent 驱动的安装器使用的安装说明。
许可证
代码遵循 MIT 许可证。工具提供的目录内容遵循 CC BY 4.0 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。