Index Agentica

com.indexagenticav0.1.0更新於 Oct 2, 2026

Search a curated directory of agent tools, MCP servers, APIs, protocols and skills. No auth.

已驗證Streamable HTTP可網頁執行Web Search & ScrapingDeveloper ToolsKnowledge & Memory

概覽

AI 產生的概覽

讓助理搜尋一個收錄代理工具、MCP 伺服器、API、協定與技能的精選目錄,並讀取其中的指南、比較、技術棧與技能內容。

功能
這是一個唯讀的遠端 MCP 伺服器,提供四個工具:search 用來檢索目錄項目與長篇內容,get_entry 取得單一完整項目,get_content 取得指南、比較、技術棧或技能(含 markdown),list_categories 回傳分類與數量。相同資料也透過 REST API 提供對應端點。所有工具都標示為唯讀,並回傳結構化 JSON。
適用情境
當助理需要查詢代理工具、MCP 伺服器、協定或 API,或在回答問題時引用該目錄的指南、比較、技術棧與可下載技能時適用。它是探索與參考資料來源,而不是對使用者系統執行操作的工具。
執行需求
需要一個遠端 Streamable HTTP 端點;不需安裝、不需 API 金鑰、不需驗證。用戶端需支援 Streamable HTTP(部分用戶端標示為 http 或 streamableHttp)。需要能連線至該端點的網路。
安裝前請注意
此伺服器為唯讀,不寫入任何內容,連接風險低。請求會寫入使用分析資料集,包含用戶端名稱與版本、截斷的 User-Agent、國家、網路 ASN、延遲與結果數量;README 聲明不記錄 IP 位址、搜尋查詢文字或自由文字參數。限流約為每個用戶端 IP 每 60 秒 120 次請求。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Index Agentica,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "mcp": {
      "type": "http",
      "url": "https://mcp.indexagentica.com/mcp"
    }
  }
}

README

indexagentica-mcp

Read-only remote MCP server (Streamable HTTP) and REST search API for Index Agentica, the agent-first directory of skills, harnesses, MCP servers, tools, protocols and APIs, plus its long-form guides, comparisons, stacks and downloadable Agent Skills. Runs on Cloudflare Workers (free plan), stateless, no Durable Objects, no auth, CORS open.

Install

Remote server: no install, no API key. Streamable HTTP at https://mcp.indexagentica.com/mcp (live).

bash
claude mcp add --transport http indexagentica https://mcp.indexagentica.com/mcp

Other clients: add the URL as a Streamable HTTP server with no auth (see llms-install.md). The same Worker also answers at https://indexagentica-mcp.indexagentica.workers.dev/mcp (see DEPLOY.md).

Endpoints

MethodPathWhat
POST/mcpMCP Streamable HTTP endpoint (JSON-RPC 2.0, JSON responses)
GET/DELETE/mcp405 (no standalone SSE stream, no sessions)
GET/JSON self-description with links to the MCP endpoint, REST, llms.txt, docs
GET/search?q=&type=&category=&tags=a,b&limit=Ranked search over entries and long-form (type: entry, guide, comparison, stack, skill or all (default); category applies to entries; limit 1-50, default 10; tags are AND-ed)
GET/entries/<id> (or <id>.json)One full entry; 404 includes suggestions
GET/entriesAll ids
GET/content/<type>/<id> (or <id>.json)One guide, comparison, stack or skill: metadata + markdown (?include_html=1 adds HTML); 404 includes suggestions
GET/content?type=Published long-form items (metadata)
GET/categoriesCategories with counts
GET/openapi.jsonOpenAPI 3.1 for the REST API
GET/.well-known/mcp/server-card.jsonStatic server card (Smithery scan fallback): serverInfo, authentication: {required: false}, the same tools as tools/list, empty resources/prompts
GET/healthLiveness (not rate limited)

Errors are always JSON: {"error":{"status":400,"code":"bad_request","message":"..."}} (codes: bad_request, not_found, method_not_allowed, rate_limited, upstream_error).

MCP tools

ToolInputOutput (structuredContent)
searchquery (string), type? (entry|guide|comparison|stack|skill|all, default all), category? (slug; entries only), tags? (string[], all must match), limit? (1-50){query, type, category?, tags, limit, total, results[]}; each result has type, id, name, summary, url, tags, score, links, plus category (entries) or author, last_verified, entries (long-form)
get_entryid (kebab-case){entry} (the full entry per the entry schema + links + longform back-references)
get_contenttype (guide|comparison|stack|skill), id, include_html?{content}: front matter, metadata, markdown (scheme links resolved to absolute URLs), links; comparisons add comparison (criteria, table, verdict), stacks add stack (use case, components), skills add skill_md (full SKILL.md) and links.zip / links.skill_md
list_categoriesnone{total, generated, categories[{slug,name,description,count,html,json}]}

Every tool has a JSON-Schema inputSchema, an outputSchema, readOnlyHint annotations, and returns both structuredContent and the same JSON as a text content block. Bad arguments and unknown ids come back as isError: true tool results (so the model can correct itself); an unknown tool name is JSON-RPC -32602.

Scoring: per query word, exact id/name match 12, id segment 6, name substring 5, exact tag 4 (partial tag 2), summary 2, category 1.5, description 1; +8 if the whole phrase is in the name; multiplied by the fraction of words matched.

Protocol support (dual-era, stateless)

  • 2026-07-28 (current spec, "modern"): no handshake. Each POST carries _meta["io.modelcontextprotocol/protocolVersion"] and the MCP-Protocol-Version, Mcp-Method (and for tools/call, Mcp-Name, base64 sentinel supported) headers. The server validates headers against the body (-32020 HeaderMismatch), rejects unknown versions with -32022 + supported list, implements server/discover, returns resultType: "complete", serverInfo in result _meta, and ttlMs/cacheScope caching hints on tools/list and server/discover. Unknown methods -> HTTP 404 + -32601.
  • 2025-11-25 / 2025-06-18 / 2025-03-26 ("legacy"): initialize is answered (version negotiated, falling back to 2025-11-25), notifications/initialized -> 202, ping, tools/list, tools/call; 2025-03-26 batches are accepted. No Mcp-Session-Id is ever issued, so every request is independent and any Worker isolate can serve it.
  • Responses are always application/json (never SSE). Origin is checked against ALLOWED_ORIGINS (default * because the data is public and read-only).

Spec refs: Streamable HTTP 2026-07-28, Versioning / dual-era, server/discover.

Data & caching

Source of truth is the published static site: GET https://indexagentica.com/api/index.json (all entries + categories) and GET /api/longform.json (long-form metadata), fetched together; if the long-form index can't be loaded, entries keep working. get_content fetches /api/longform/<route>/<id>.json on demand (same cache), always from DATA_BASE_URL. The Worker keeps the indexes in isolate memory for CACHE_TTL_SECONDS (600 s), also stores it in the Cloudflare Cache API (effective on a custom domain; a no-op on workers.dev), coalesces concurrent refreshes, and serves the stale copy if the upstream fetch fails. New categories added by the site build appear automatically. Nothing is written anywhere.

Usage logging (Workers Analytics Engine)

Each request (except OPTIONS, /health, /robots.txt, /favicon.ico) writes one data point to the Analytics Engine dataset indexagentica_mcp (binding ANALYTICS in wrangler.toml), so we can count agent usage per tool and client. If the binding is missing (local tests, the ratelimit-test env), logging is a no-op, and a failing write never affects the response. Workers Free includes 100,000 data points written per day (pricing); data is kept for 3 months (limits).

ColumnFieldNotes
index1<route>:<tool or method or endpoint>e.g. mcp:search, rest:get_entry
blob1routemcp or rest
blob2endpointnormalized: /mcp, /search, /entries/{id}, /content/{type}/{id}, ..., other
blob3JSON-RPC methodinitialize, tools/call, batch, ... (MCP only)
blob4toolMCP tool name, or the REST equivalent (search, get_entry, get_content, list_content, list_categories)
blob5, blob6client name, versionfrom initialize clientInfo or 2026-07-28 _meta["io.modelcontextprotocol/clientInfo"]; truncated to 64/32 chars
blob7User-Agenttruncated to 128 chars
blob8, blob9protocol version, eramodern / legacy
blob10outcomeok, error (HTTP ≥ 400, JSON-RPC error or isError tool result), rate_limited
blob11detailJSON-RPC error code, tool_error, or HTTP status
blob12, blob13country, colofrom request.cf
blob14, blob15, blob16type filter, category filter, target idonly kebab-case values (public catalog slugs/ids); anything else is stored as invalid
double1HTTP status
double2latency (ms)wall time inside the Worker (Workers clocks advance on I/O)
double3ASNfrom request.cf.asn (network, not person)
double4result countsearch total
double5, double6query length in characters, words

Privacy: no IP addresses, no search query text, no free-text tool arguments, no cookies or tokens (the server has none). Clients are identified only by their self-reported name/version and a truncated User-Agent. Example query (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.

Rate limiting

  • Default: 120 requests / 60 s per client IP, per Cloudflare location, via the Workers Rate Limiting binding ([[ratelimits]] in wrangler.toml, GA since Sept 2025; period must be 10 or 60 s). It is intentionally approximate (eventually consistent, per location).
  • If the binding is absent or errors, a per-isolate token bucket with the same numbers (RATE_LIMIT_REQUESTS / RATE_LIMIT_PERIOD_SECONDS) is used instead.
  • Exceeding it returns HTTP 429 with Retry-After; on /mcp the body is a JSON-RPC error (-32000), elsewhere the JSON error envelope. /health and OPTIONS are not metered. Responses carry x-ratelimit-limit / x-ratelimit-period.
  • Free-plan ceiling to keep in mind: Workers Free allows 100,000 requests/day per account and 10 ms CPU per request (limits). A cold search costs ~1-3 ms CPU (parsing the ~135 KB index); warm requests well under 1 ms.

Local development & tests

bash
npm installnpm 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 CLInpm run test:unit            # pure unit tests (no network)BASE=https://<deployed-host> npm run test:e2e   # E2E against any deploymentDATA_BASE_URL=http://127.0.0.1:8089 npm test   # point the local Workers at another copy of the site

The long-form E2E checks adapt to the data: with published items they fetch one of each type over REST and MCP; with none (all drafts) they check the empty listings and not-found paths. To exercise the full path before anything is published, build the site with drafts published (e.g. INCLUDE_DRAFTS=1 SITE_URL=http://127.0.0.1:8089 node scripts/build.mjs in the site repo), serve dist/ on that port, and run npm test with DATA_BASE_URL set.

scripts/test-local.sh starts the normal Worker on :8797 and a low-limit copy (--env ratelimit-test, 5 req / 10 s) on :8798, runs test/e2e.mjs, then checks the server with @modelcontextprotocol/inspector --cli in the default legacy era and pinned to the modern era (protocolEra: "modern" config).

Manual checks:

bash
npx mcp-inspector --cli http://127.0.0.1:8787/mcp --transport http --method tools/listnpx 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"}}}'

Connecting a client

bash
claude mcp add --transport http indexagentica https://mcp.indexagentica.com/mcp

JSON config (e.g. Claude Code's .mcp.json; Claude Code requires "type": "http" for remote servers):

json
{ "mcpServers": { "indexagentica": { "type": "http", "url": "https://mcp.indexagentica.com/mcp" } } }

Other clients use their own name for Streamable HTTP (Cline: "type": "streamableHttp"; some accept just "url").

Configuration (wrangler.toml [vars])

VarDefaultMeaning
DATA_BASE_URLhttps://indexagentica.comWhere /api/index.json is fetched from
CACHE_TTL_SECONDS600In-memory / Cache API TTL
RATE_LIMIT_REQUESTS, RATE_LIMIT_PERIOD_SECONDS120, 60Documented limit + fallback bucket (keep in sync with [ratelimits.simple])
ALLOWED_ORIGINS*Comma-separated Origin allow-list for browser callers
PUBLIC_BASE_URLrequest originCanonical base for links in GET /

Deploy

See DEPLOY.md for the options for mcp.indexagentica.com and the exact Cloudflare/GoDaddy access needed. Short version:

bash
export CLOUDFLARE_ACCOUNT_ID=...   # from the Cloudflare dashboardexport CLOUDFLARE_API_TOKEN=...    # custom token, permissions in DEPLOY.mdnpm run deploy:dry                 # build onlynpm run deploy                     # -> https://mcp.indexagentica.com (custom domain)                                   #    + https://indexagentica-mcp.indexagentica.workers.devBASE=https://mcp.indexagentica.com npm run test:e2e

Layout

src/index.js      router, CORS, JSON errors, REST endpoints, rate-limit gatesrc/mcp.js        stateless dual-era MCP JSON-RPC handlersrc/tools.js      tool definitions (schemas) + implementations shared with RESTsrc/search.js     scoring / filteringsrc/data.js       fetch + cache of /api/index.jsonsrc/ratelimit.js  Workers rate limiting binding + in-isolate fallbacksrc/openapi.js    OpenAPI document for the REST APIsrc/analytics.js  per-request usage logging to Workers Analytics Engine (no-op without the binding)test/             unit tests, E2E script, Inspector configdocs/             proposed copy for llms.txt, /agents and the directory listing

License: code MIT; directory content CC BY 4.0.

Registry metadata

  • server.json: official MCP Registry entry (com.indexagentica/mcp, schema 2025-12-11), validated with mcp-publisher validate. Publishing uses HTTP domain auth against https://indexagentica.com/.well-known/mcp-registry-auth; it's a separate, manual step once the endpoint is live.
  • glama.json: Glama ownership claim (maintainer Drudley).
  • llms-install.md: install notes for agent-driven installers such as Cline.

License

MIT for the code. Directory content served by the tools is CC BY 4.0.

來源:README.md,提交 d2b410d

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v0.1.0最新Oct 2, 2026