Index Agentica

Use the Index Agentica MCP server: the five real tools, their schemas and the mistakes to avoid

A reference for the five tools that mcp.indexagentica.com actually exposes (search, get_entry, get_content, list_categories and request_listing), with input schemas, live example calls and responses, the matching REST endpoints, and the wrong tool names and arguments that clients send most often.

Type
Guide
Author
Agentica Author
Published
Last verified
Difficulty
beginner
Time
15 min

Prerequisites

The Index Agentica MCP server at https://mcp.indexagentica.com/mcp has exactly five tools:

ToolWhat it doesWrites anything?
searchRanked search across entries, guides, comparisons, stacks and skillsNo (readOnlyHint: true)
get_entryOne directory entry by id, with its long-form backlinksNo (readOnlyHint: true)
get_contentOne guide, comparison, stack or skill by type and id, with its full MarkdownNo (readOnlyHint: true)
list_categoriesThe 11 entry categories and their countsNo (readOnlyHint: true)
request_listingAdds a missing tool or service to the public request queueYes (readOnlyHint: false, idempotentHint: false)

There are no other tools. Names such as search_entries, get_guide, fetch or list_entries don't exist on this server. The server's public usage stats show why that matters: in the 7 days before 2026-10-24, 25 of 89 tools/call requests were bucketed as unknown_tool (/v1/usage, generated 07:08 CEST). Part of that count is a stats bug, explained under "What the usage numbers show" below.

If you're an agent rather than a person, the indexagentica-lookup skill is the short version of this page. For connecting a client in the first place, see Connect an agent to a remote MCP server.

The basics

All the examples below use the 2025-11-25 header so they work as single curl calls:

M=https://mcp.indexagentica.com/mcp
call() { curl -s "$M" -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H 'mcp-protocol-version: 2025-11-25' -d "$1"; }

call '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

tools/list returned the five names above in this order: search, get_entry, get_content, list_categories, request_listing. Use tools/list as the source of truth, not this page, because the schema can change.

search

Searches entries and long-form content and ranks the results. Exact id or name matches, whole-word matches and leading-word matches in the name rank above hits that only match the summary or tags.

ArgumentTypeNotes
querystring, max 200Free text. The argument is query, not q.
typeentry, guide, comparison, stack, skill or allDefault all
categorycategory slugOnly for entries. It implies type: entry.
tagsarray of strings, max 10A result must have all of them.
limitinteger 1–50Default 10

You have to give at least one of query, type, category or tags. The schema sets additionalProperties: false.

call '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search","arguments":{"query":"sandbox","type":"comparison","limit":2}}}'

Real response (structuredContent, trimmed after the first result):

{
  "query": "sandbox", "type": "comparison", "tags": [], "limit": 2, "total": 5,
  "results": [{
    "type": "comparison",
    "id": "self-hosted-agent-sandboxes",
    "name": "Self-hosted sandboxes for agents compared",
    "summary": "Six ways to isolate agent-run code on hardware you control (...)",
    "url": "https://indexagentica.com/compare/self-hosted-agent-sandboxes/",
    "tags": ["sandbox", "self-hosted", "code-execution", "..."],
    "author": "Agentica Author",
    "last_verified": "2026-10-20",
    "entries": ["opensandbox", "aio-sandbox", "..."],
    "score": 12,
    "links": {
      "html": "https://indexagentica.com/compare/self-hosted-agent-sandboxes/",
      "markdown": "https://indexagentica.com/compare/self-hosted-agent-sandboxes.md",
      "json": "https://indexagentica.com/api/longform/compare/self-hosted-agent-sandboxes.json",
      "source": "https://github.com/Drudley/indexagentica/blob/main/content-long/compare/self-hosted-agent-sandboxes.md"
    }
  }]
}

The fields differ by result type:

get_entry

ArgumentTypeNotes
idstring, kebab-case (^[a-z0-9]+(?:-[a-z0-9]+)*$), max 80Required
call '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_entry","arguments":{"id":"playwright"}}}'

The response is {"entry": {...}}. Besides id, name, category, summary, url, repo, tags, license, pricing, status, related, sources, added, updated, last_verified, submitted_by and maintainer, an entry includes:

An id that doesn't exist is a tool error with suggestions, not a protocol error:

{"error":"no entry with id \"github-mcp\"","suggestions":["github-mcp-server","github-mcp-registry","mcp-reference-servers","awesome-mcp-servers","deepwiki-mcp"]}

get_content

ArgumentTypeNotes
typeguide, comparison, stack or skillRequired. Singular. There is no entry type here.
idkebab-case stringRequired
include_htmlbooleanDefault false. Adds rendered HTML.
call '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_content","arguments":{"type":"skill","id":"connect-remote-mcp"}}}'

The response is {"content": {...}}. For this skill, the live keys were:

type, id, title, summary, author, tags, published, last_verified, entries, links, status, skill, entries_detail, related, sources, front_matter, markdown, skill_md

The keys vary by type:

list_categories

It takes no arguments. Pass {} or leave arguments out.

call '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"list_categories","arguments":{}}}'

It returns {total, generated, categories: [{slug, name, description, count, html, json}]}. On 2026-10-24, total was 433, across these slugs:

skills (24), harnesses (49), mcp-servers (89), tools (62), protocols (24), apis (18), information (37), finance-payments (47), directories (23), infrastructure (26) and evals-observability (34).

request_listing (writes to a public queue)

This is the only tool with side effects. It adds a request to the public queue at indexagentica.com/requested/, where the Curator checks it and lists, merges or rejects it. Call it only when a user actually wants something added and search has confirmed it isn't already listed.

ArgumentTypeNotes
wantedstring, 1–120Required. The name of the missing tool or service.
categorycategory slug or otherRequired
urlabsolute http(s) URL, max 300Optional
reasonstring, max 500Optional
requesterstring, max 60Optional. Shown publicly.

The server rejects unknown fields and control characters. A request whose name matches one already in the queue is merged into it as a vote (merged: true, vote_counted) instead of creating a duplicate. The response is {ok, id, merged, vote_counted, request: {..., status}, note, list}, where status is one of pending, verified, listed or rejected. The limit is 5 requests per hour and 20 per day per client. Over the limit, you get a rate_limited error with retry_after in seconds.

A successful call wasn't made for this guide, because it would have added a real public request. This invalid call shows the error shape, and it writes nothing:

call '{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"request_listing","arguments":{"wanted":"x"}}}'
# result: {"isError":true, "content":[{"type":"text","text":"{\"error\":\"category is required\",\"code\":\"bad_request\"}"}]}

REST equivalents

The same data is available without MCP on the same host. These are useful for scripts and for clients that can only make HTTP requests. The OpenAPI document describes them all.

MCPREST
searchGET /search?q=&type=&category=&tags=a,b&limit= (here it is q, and tags is comma-separated)
get_entryGET /entries/{id} (.json suffix optional). GET /entries lists all ids.
get_contentGET /content/{type}/{id}?include_html=1. GET /content?type=skill lists items.
list_categoriesGET /categories
request_listingPOST /v1/requests with the same JSON body (201 when new, 200 when merged). GET /v1/requests?status=&limit= reads the queue.
—GET /skills/{id}.zip, GET /skills/{id}/SKILL.md (302 to the file), GET /.well-known/mcp/server-card.json, GET /stats (alias /v1/usage), GET /health

REST responses aren't wrapped in {entry} or {content}. /entries/playwright returns the entry object itself. REST errors look like {"error": {"status", "code", "message"}}, with code set to bad_request, not_found, method_not_allowed, rate_limited or upstream_error. A 404 for an entry includes suggestions, just like the tool does. Successful reads are sent with cache-control: public, max-age=300.

The site also publishes static files that need no server at all: llms.txt (about 106 KB on 2026-10-24), llms-full.txt (about 1.1 MB) and api/index.json (about 830 KB). See the llms.txt entry for the format.

Common mistakes and what they return

Every row was sent to the live server on 2026-10-24.

You sentWhat happensFix
Tool search_entries, list_entries, findJSON-RPC error -32602, "Unknown tool: search_entries. Valid tools: search, get_entry, get_content, list_categories, request_listing. Did you mean "search"?"Use search
Tool get_guide, get_comparison, get_skill-32602, suggestion get_contentget_content with type: "guide" and so on
Tool fetch, get-32602, suggestion get_entryget_entry for entries, or the links.markdown URL for pages
Tool mcp__indexagentica__search or indexagentica_search-32602, suggestion searchSend the bare name. Prefixes like this are how some clients label MCP tools locally. They aren't the server's tool names.
search with {"q": "sandbox"}isError: "provide a query, a type, a category or tags"The MCP argument is query. q is only for REST.
search with "tags": "mcp,auth"isError: "tags must be an array of strings""tags": ["mcp", "auth"] (comma-separated only in REST)
search with "category": "sandboxes"isError: unknown category, followed by the 11 valid slugsCall list_categories first
search with type: "guide" plus a categoryisError: "category applies to directory entries only; use it with type entry (or omit type)"Categories only apply to entries. For guides, use query or tags.
get_content with type: "entry"isError: "type is required: one of guide, comparison, stack, skill (use get_entry for directory entries)"get_entry
get_content with type: "guides"isError: "type is required: one of guide, comparison, stack, skill"Types are singular
get_entry with a guessed idisError with suggestionsPick from the suggestions or search first
initialize under 2026-07-28HTTP 404, -32601 Method not found: initializeUnder the stateless version, skip initialize, or use server/discover

Unknown tool names are a protocol error (-32602 with HTTP 200), as the MCP Tools specification prescribes, so many SDKs throw instead of returning a result. Since 2026-10-24, the error's data includes requested, valid_tools and, when the server can guess, suggestion. A client or agent can read data.suggestion and retry once. The server never runs a suggested tool on its own.

Call it from code

This script (ia-client.mjs, in a folder with "type": "module" in package.json) uses the MCP TypeScript SDK v2 client (@modelcontextprotocol/client 2.3.1). It lists the tools, runs a search, shows a missing-id tool error and catches the unknown-tool exception:

import { Client, StreamableHTTPClientTransport } from "@modelcontextprotocol/client";

const client = new Client({ name: "ia-example", version: "1.0.0" }, { versionNegotiation: { mode: "auto" } });
await client.connect(new StreamableHTTPClientTransport(new URL("https://mcp.indexagentica.com/mcp")));

const { tools } = await client.listTools();
console.log(tools.map((t) => t.name).join(", "));

const found = await client.callTool({ name: "search", arguments: { query: "sandbox", type: "comparison", limit: 3 } });
for (const r of found.structuredContent.results) console.log(r.type, r.id, r.score);

const missing = await client.callTool({ name: "get_entry", arguments: { id: "github-mcp" } });
console.log(missing.isError, JSON.parse(missing.content[0].text).suggestions.slice(0, 2));

try {
  await client.callTool({ name: "search_entries", arguments: { query: "sandbox" } });
} catch (e) {
  console.log("unknown tool throws:", e.message);
}
await client.close();

Output on 2026-10-24 with Node.js 22.23.2:

search, get_entry, get_content, list_categories, request_listing
comparison self-hosted-agent-sandboxes 12
comparison code-sandboxes 10
comparison coding-agent-harnesses 4
true [ 'github-mcp-server', 'github-mcp-registry' ]
unknown tool throws: Unknown tool: search_entries. Valid tools: search, get_entry, get_content, list_categories, request_listing. Did you mean "search"? Call tools/list for their input schemas.

For interactive poking, MCP Inspector works against the same URL. Test your MCP server covers its CLI mode.

What the usage numbers show

/v1/usage publishes tool_calls_by_tool for the last 24 hours, the last 7 days and all time. It reports only the server's own tool names, and everything else is counted as unknown_tool, so the invented names themselves aren't public. On 2026-10-24 at 07:08 CEST, the stats read:

WindowCallsunknown_toolsearchlist_categoriesget_entryget_content
Last 24 h2587433
Last 7 days8925252766
All time2633960913538

Read these numbers with one caveat. Until a server change on 2026-10-24, the stats code left request_listing out of its list of known tools, so real request_listing calls were also counted as unknown_tool. The unknown_tool figures above therefore include some valid calls. The same change made the unknown-tool error list the valid tools and suggest the closest one, as shown in the table above.

Checklist

Directory entries in this guide

Related

Sources

Machine-readable