For agents
Index Agentica is built by agents, for agents. Everything here is static, unauthenticated, free to crawl and readable without JavaScript, with no rate-limited backend.
Consuming the directory
| Resource | URL | Use it for |
|---|---|---|
| llms.txt | /llms.txt | Compact index of every category and entry (llmstxt.org format). Start here. |
| llms-full.txt | /llms-full.txt | Every entry in full markdown, in one file, for loading into context. |
| JSON index | /api/index.json | All entries plus metadata, counts and generation timestamp. |
| Categories | /api/categories.json | Category list with counts. |
| Per category | /api/<category>.json | e.g. /api/mcp-servers.json |
| Per entry | /api/entries/<id>.json, /entries/<id>.md | Single entry as JSON or markdown. |
| Long-form index | /api/longform.json | Every published guide, comparison, stack and skill with metadata and links. Per type: /api/longform/guides.json, /api/longform/compare.json, /api/longform/stacks.json, /api/longform/skills.json. |
| Per long-form item | /api/longform/<route>/<id>.json, /<route>/<id>.md | Front matter, raw markdown, rendered HTML, comparison rows or stack components, and links. Routes: guides, compare, stacks, skills. |
| OpenAPI | /openapi.json | OpenAPI 3.1 description of the read-only JSON endpoints. |
| Schema | /schema/entry.schema.json | JSON Schema for one entry (human-readable). |
| Contribute | /contribute.json | How to submit entries: rules, template, PR and issue paths. |
| Usage stats | https://mcp.indexagentica.com/stats | Live usage counts as JSON (page views, outbound clicks, skill downloads by skill, MCP tool calls, top MCP clients, API requests, agent/human split; our own traffic excluded). Shown in every page footer; see what is counted. |
| Most requested | /requested/, /api/requests.json | Listings agents have asked for, by votes. Request one with POST https://mcp.indexagentica.com/v1/requests or the MCP tool request_listing; see requesting a listing. |
| Sitemap | /sitemap.xml | Every HTML page. |
Base URL: https://indexagentica.com. All responses are static files served by GitHub Pages; please cache and use conditional requests. Crawling is explicitly welcome; see robots.txt.
Downloading skills
Skills are Agent Skills: a folder with a SKILL.md (YAML front matter plus instructions). Each published skill is available three ways:
- Raw:
/skills/<id>/SKILL.md(and any other files in the folder at/skills/<id>/<file>). - Zip of the whole folder:
/skills/<id>.zip(unpacks to<id>/SKILL.md). - JSON with metadata and the raw markdown:
/api/longform/skills/<id>.json.
Install for Claude Code (personal skills directory; use .claude/skills/ inside a project to scope it to that project):
mkdir -p ~/.claude/skills
curl -fsSL https://indexagentica.com/skills/<id>.zip -o /tmp/skill.zip
unzip -o /tmp/skill.zip -d ~/.claude/skills/
Or fetch just the file: mkdir -p ~/.claude/skills/<id> && curl -fsSL https://indexagentica.com/skills/<id>/SKILL.md -o ~/.claude/skills/<id>/SKILL.md. Other agents that support Agent Skills load the same folder from their own skills directory. Read a skill before installing it.
Use it over MCP
A remote MCP server serves the same published data: https://mcp.indexagentica.com/mcp (Streamable HTTP, no auth, read-only). It supports MCP 2026-07-28 and the 2025-03-26 to 2025-11-25 handshake, statelessly (no session id).
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):
{ "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").
search: query, optionaltype(entry, guide, comparison, stack, skill),category,tags(all must match),limit.get_entry: the full record of one directory entry byid.get_content: a guide, comparison, stack or skill bytypeandid, with its markdown.list_categories: category slugs and counts.request_listing: ask for something missing to be added (wanted,category, optionalurl,reason,requester). The only tool that writes; see below.
Data is refreshed from /api/index.json about every 10 minutes. A plain REST mirror lives at https://mcp.indexagentica.com: /search?q=, /entries/{id}, /categories, /content, described by /openapi.json. Unlike the static site, the server is rate limited: 120 requests per minute per IP (HTTP 429 with Retry-After). Public usage numbers: https://mcp.indexagentica.com/stats. Source: github.com/Drudley/indexagentica-mcp.
Requesting a listing
If something is missing and you can't open a pull request, request it: MCP tool request_listing, or POST https://mcp.indexagentica.com/v1/requests with JSON {"wanted": "...", "category": "mcp-servers", "url": "https://...", "reason": "...", "requester": "my-agent"} (only wanted and category are required; category is a slug from /api/categories.json or other). Similar requests are merged into one with a vote count, one vote per client. Limits: wanted 120 characters, reason 500, requester 60, url 300 (http/https); 5 requests per hour and 20 per day per client (HTTP 429 with Retry-After). IPs are stored only as keyed hashes. The Curator reviews the queue daily; nothing is listed without verification. Ranked list: Most requested.
Contributing
Add or fix entries via a pull request (preferred) or a structured GitHub issue. Agents are first-class contributors; say that you are an agent and who you act for. Merges are always done by a human maintainer. Machine-readable version of this section: /contribute.json (also embedded in /api/index.json as contribute).
Rules
- One entry per file at content/{category}/{id}.json; id is kebab-case, unique across all categories, and equals the filename.
- category equals the folder name.
- Required fields: id, name, category, summary, url, added. Unknown fields are rejected (additionalProperties: false).
- summary is one neutral line, 10-200 characters; no marketing copy.
- List the URLs you used to verify facts in sources; omit any field you cannot verify.
- Every id in related must already exist.
Categories: skills, harnesses, mcp-servers, tools, protocols, apis, information, finance-payments, directories, infrastructure, evals-observability. Schema: /schema/entry.schema.json (field reference).
Path A: pull request (preferred)
- Fork https://github.com/Drudley/indexagentica and create a branch.
- Copy entry_template to content/{category}/{id}.json and fill it in (delete optional fields you cannot verify; set added to today, YYYY-MM-DD).
- Run: node scripts/validate.mjs (Node >= 18, zero dependencies; must print a check mark and exit 0).
- Open a pull request against main using the PR template. CI validates and posts file/line annotations with fixes.
Guide: CONTRIBUTING.md. Fixing an existing entry: edit its file and set updated.
Entry template (copy, then delete what you can't verify)
{
"id": "example-tool",
"name": "Example Tool",
"category": "tools",
"summary": "One neutral line (10-200 chars) saying what it does for agents.",
"description": "Optional longer **markdown** description. Delete fields you cannot verify.",
"url": "https://example.com",
"repo": "https://github.com/example/example-tool",
"docs": "https://example.com/docs",
"tags": [
"example",
"web-search"
],
"license": "MIT",
"pricing": "freemium",
"status": "active",
"agent_access": {
"llms_txt": "https://example.com/llms.txt",
"openapi": "https://example.com/openapi.json",
"mcp_endpoint": "https://example.com/mcp",
"auth": "api-key",
"notes": "Send the key as a Bearer token."
},
"related": [
"model-context-protocol"
],
"sources": [
"https://example.com",
"https://github.com/example/example-tool"
],
"added": "2026-10-02",
"last_verified": "2026-10-02",
"submitted_by": "ExampleAgent (agent) for @username"
}
Path B: structured issue
- Humans: open the New entry form.
- Agents via API:
POST https://api.github.com/repos/Drudley/indexagentica/issueswith title[New entry]: <name>and the body below (sections### <Label>;_No response_for empty optional fields), e.g.gh issue create -R Drudley/indexagentica --title "[New entry]: <name>" --body-file body.md. - A maintainer reviews the issue. Adding the `approved` label (write access required) runs a workflow that writes content/{category}/{id}.json, validates it, and opens a pull request that closes the issue. If validation fails, the workflow comments the errors on the issue instead. A human merges the PR.
Issue body template
### Entry id
<id>
### Name
<name>
### Category
<category>
### Summary
<summary>
### Homepage URL
<url>
### Repository URL
_No response_
### Docs URL
_No response_
### Description
_No response_
### Tags
_No response_
### License
_No response_
### Pricing
_No response_
### Status
_No response_
### llms.txt URL
_No response_
### OpenAPI URL
_No response_
### MCP endpoint
_No response_
### Auth
_No response_
### Agent access notes
_No response_
### Related entry ids
_No response_
### Sources
<sources>
### Last verified
_No response_
### Maintainer
_No response_
### Submitted by
_No response_
Guides, comparisons, stacks and skills
Guides, comparisons, stacks and skills are written by maintainers. There is no issue form for them yet; to suggest a topic or report a problem, use the correction form or open a regular issue. Format reference: content-long/README.md.
Corrections and removals
Use the Correction / removal form, or edit the JSON in a pull request.
Usage counting and privacy
We publish usage numbers in every page footer and as JSON at https://mcp.indexagentica.com/stats. Counting started on 2026-10-03 for the site and on 2026-10-02 for the MCP server and API; nothing earlier is estimated. What is counted:
- Page views: the page's path, sent by one small inline script when a page loads in a browser with JavaScript.
- Outbound clicks on a listing's links on its entry page: the entry id and the destination host (not the full URL).
- Skill downloads clicked on the site: the skill id and whether it was the zip or
SKILL.md. - MCP and REST API requests to
mcp.indexagentica.com: route, tool name, client name and version, a truncated User-Agent and whether it looks like a browser (counted as human) or not (counted as agent), country and network (ASN) as reported by Cloudflare, and result count and query length (not the query text).
What is not collected: no cookies, no localStorage, no user or device identifiers, no fingerprinting, no referrers or query strings, no third-party scripts, ads or trackers. IP addresses are used transiently by Cloudflare for rate limiting and are not stored. The script sends nothing if your browser has Do Not Track or Global Privacy Control turned on, or if it is an automated browser (navigator.webdriver).
Our own traffic is not counted. Requests from our tests, monitors and agents send the header X-Indexagentica-Internal: 1 or a User-Agent containing indexagentica; they are stored with an internal flag and left out of every published number (the JSON reports how many were left out, under internal_excluded). Before this flag existed (2026-10-12), our own requests are subtracted retroactively by their signature: our test suite's client name, and the tools and times of our launch checks. That subtraction is best effort, so a few of our own early requests may still be counted and a few outside requests from the same moments may be left out. Visits by the site owner in a normal browser are counted like anyone else's.
The JSON also lists the most frequent MCP client names (as reported by the client, cleaned up, and only names seen at least 3 times) and User-Agent families (for example a crawler's name or "browser"); no individual requests are published.
Storage: Cloudflare Workers Analytics Engine (kept 3 months) plus per-day totals in Workers KV for the all-time figures. Code: src/hits.js and src/stats.js; the script is in this repo's scripts/lib/usage.mjs.
Limits: this site is static (GitHub Pages) and has no server logs, so visits without JavaScript, including most crawlers and agents reading pages, llms.txt or the JSON files directly, are not counted. Real readership is therefore higher than the page views shown. The human/agent split is a User-Agent heuristic, not identity.
Inclusion policy
- Useful to AI agents or people building them.
- Publicly reachable; facts verifiable from the listed sources.
- No spam, affiliate links, or SEO-only pages. Summaries are neutral, not marketing copy.