# CyberAgents Exchange — Full Reference > A community directory of open-source cybersecurity AI agents, skills, MCP servers, and playbooks. This site is a directory: each listing is metadata pointing at code and content in its author's GitHub repository. The JSON endpoints below publish every listing, generated from the same data as the site's pages. ## How to use this data Fetch in steps rather than all at once: 1. **The manifest** — https://exchange.tenable.com/api/index.json — names the index files to read; it holds no listing rows itself. 2. **The type indexes** — fetch the files the manifest lists. Each type has its own JSON Lines index, which may be split into parts, all listed in the manifest. The files hold one short row per listing, 140 in all (27 agents, 77 skills, 29 mcp servers, 7 playbooks). 3. **Filter the rows** of those files by `type`, `tier`, `integrations`, `domains` or `tags` to find candidates, and use each row's `repo` to set aside archived repos and vetted listings whose code has changed since review before fetching anything else. 4. **The detail record** — fetch a candidate's `json_url` for everything the site publishes about it: review dates, MCP tools, skill invocation, playbook agent chains. Then use `github_url` to read the code, and `url` to link a person to the listing page. Repo health is already in the data, so none of this needs the GitHub API. ## JSON endpoints - **Manifest** (start here): https://exchange.tenable.com/api/index.json — for each type, its count and its index files with `url`, `count` and `bytes`, plus `detail_url_pattern` - **Index of agents, as JSON Lines** (one row per line): https://exchange.tenable.com/api/agents.jsonl - **Index of skills, as JSON Lines** (one row per line): https://exchange.tenable.com/api/skills.jsonl - **Index of mcp servers, as JSON Lines** (one row per line): https://exchange.tenable.com/api/mcp-servers.jsonl - **Index of playbooks, as JSON Lines** (one row per line): https://exchange.tenable.com/api/playbooks.jsonl - **Later parts** of a type's index (for example `skills-2.jsonl`) exist only when the type outgrows one file; the manifest lists every file - **One agent**: https://exchange.tenable.com/api/agents/.json - **One skill**: https://exchange.tenable.com/api/skills/.json - **One mcp server**: https://exchange.tenable.com/api/mcp-servers/.json - **One playbook**: https://exchange.tenable.com/api/playbooks/.json All endpoints return JSON with CORS open to any origin. Dates are calendar dates (`YYYY-MM-DD`); `repo` timestamps are ISO 8601 date-times. Optional fields are omitted when a listing does not set them, rather than sent as `null`. A missing record under `/api/` returns HTTP 404 with a JSON body (`{"error": "not_found", "index_url": …}`), so one bad URL in a batch does not break parsing of the rest. --- ## Index rows (`/api/.jsonl`) JSON Lines, one row per line, ordered by `slug`; a type that outgrows one file continues in later parts, listed in the manifest. Each file is at most 90000 bytes. No line is longer than 1900 characters, so line-based readers see whole rows: if a row would be longer, its `description` is shortened in the index (the detail record keeps the full text). Each row has: | Field | Type | Description | |-------|------|-------------| | `type` | enum | `agent`, `skill`, `mcp-server`, or `playbook` | | `slug` | string | URL-friendly identifier, unique within its type | | `name` | string | Display name | | `author` | string | Creator or maintainer | | `tier` | enum | Trust tier — see Trust Tiers below | | `domains` | string[] | One or two security domains, from the Domains vocabulary (optional) | | `integrations` | string[] | Products and platforms it works with, from the Integrations vocabulary | | `github_url` | string (URL) | Source repository — the code lives there, not on this site | | `url` | string (URL) | The listing's page on CyberAgents Exchange | | `json_url` | string (URL) | This listing's full detail record as JSON | | `repo` | object | Health of the listing's GitHub repo, read at build time — see Repo health. Absent means unknown, not healthy (optional) | | `tags` | string[] | Free-form descriptive tags | | `description` | string | What the listing does. May be shortened in the index; the detail record has the full text | ## Detail records (`/api//.json`) A single JSON object. ### Common fields Every detail record has these, whatever its type: | Field | Type | Description | |-------|------|-------------| | `type` | enum | `agent`, `skill`, `mcp-server`, or `playbook` | | `slug` | string | URL-friendly identifier, unique within its type | | `name` | string | Display name | | `author` | string | Creator or maintainer | | `description` | string | What the listing does | | `github_url` | string (URL) | Source repository — the code lives there, not on this site | | `license` | string | License identifier, e.g. `MIT`, `Apache-2.0` | | `tier` | enum | Trust tier — see Trust Tiers below | | `tags` | string[] | Free-form descriptive tags | | `integrations` | string[] | Products and platforms it works with, from the Integrations vocabulary | | `domains` | string[] | One or two security domains, from the Domains vocabulary (optional) | | `date_added` | date | When the listing was added (`YYYY-MM-DD`) | | `last_reviewed` | date | Date of the most recent baseline maintainer review (optional) | | `vetted_on` | date | Date the Exchange Inspector security review passed (vetted tier only) (optional) | | `vetted_commit_sha` | string | Git commit the vetted review covered (vetted tier only) (optional) | | `works_with_tenable_hexa_mcp` | boolean | Designed to work with the Tenable Hexa AI MCP server (optional) | | `repo` | object | Health of the listing's GitHub repo, read at build time — see Repo health. Absent means unknown, not healthy (optional) | | `url` | string (URL) | The listing's page on CyberAgents Exchange | | `json_url` | string (URL) | This listing's full detail record as JSON | | `markdown_url` | string (URL) | This listing as Markdown: its public fields followed by its full body text. Detail record only, not in index rows | | `source_url` | string (URL) | This listing's Markdown source in the public content repo (optional) | ### Agent (`agent`) Detail URL: https://exchange.tenable.com/api/agents/.json Common fields only. ### Skill (`skill`) Detail URL: https://exchange.tenable.com/api/skills/.json Common fields, plus: | Field | Type | Description | |-------|------|-------------| | `compatible_platforms` | string[] | AI coding platforms the skill runs on, from the Platforms vocabulary | | `invocation` | string | How to invoke the skill once installed | ### MCP server (`mcp-server`) Detail URL: https://exchange.tenable.com/api/mcp-servers/.json Common fields, plus: | Field | Type | Description | |-------|------|-------------| | `transport` | enum | MCP transport, from the Transports vocabulary | | `runtime` | enum | Runtime the server needs, from the Runtimes vocabulary | | `auth_method` | enum | How the server authenticates, from the Auth methods vocabulary | | `compatible_clients` | string[] | MCP clients it is known to work with, from the Clients vocabulary | | `tools_exposed` | { name, description }[] | MCP tools the server exposes | | `resources_exposed` | { name, description }[] | MCP resources the server exposes | | `prompts_exposed` | { name, description }[] | MCP prompts the server exposes | ### Playbook (`playbook`) Detail URL: https://exchange.tenable.com/api/playbooks/.json Common fields, plus: | Field | Type | Description | |-------|------|-------------| | `playbook_type` | enum | `standard`, `sponsored`, or `n8n` | | `agents_used` | object[] | Ordered chain of agents in the workflow — see Agent Chain below (optional) | | `logo` | string (URL) | Sponsor logo (`sponsored` playbooks only) (optional) | | `workflow_diagram` | string | n8n workflow diagram source (`n8n` playbooks only) (optional) | ### Agent chain (`agents_used`) Each entry in a playbook's `agents_used` is one step in its workflow: | Field | Type | Description | |-------|------|-------------| | `name` | string | Display name of the agent | | `role` | string | What this agent does in the workflow | | `type` | enum | `exchange`, `github`, `vendor`, or `info` — see below | | `ref` | string | Depends on `type` | - `exchange` — `ref` is the slug of a listing on CyberAgents Exchange - `github` — `ref` is a GitHub URL for an agent not listed here - `vendor` — `ref` is a vendor URL (`sponsored` playbooks only) - `info` — `ref` is optional; a manual step or context-only entry ## Repo health (`repo`) Read from GitHub when the site builds, so agents need not call the GitHub API themselves. Detail records carry the full object; index rows carry only `found`, `archived`, `pushed_at`, `stars`, `commits_since_vetted`, `vetted_commit_found`. | Field | Type | Description | |-------|------|-------------| | `found` | boolean | `false` when GitHub reported the repo missing (deleted, renamed away, or made private); the other fields are then absent | | `archived` | boolean | GitHub marks the repo archived: read-only, no longer maintained by its owner | | `pushed_at` | date-time | Last push to any branch | | `stars` | integer | GitHub stars — a popularity signal, not a safety signal | | `forks` | integer | GitHub forks — a popularity signal, not a safety signal | | `open_issues` | integer | Open issues, excluding pull requests | | `owner_type` | enum | `user` or `organization`: the GitHub account type of the repo owner | | `language` | string or null | GitHub's primary language for the repo | | `commits_since_vetted` | integer | Commits on the default branch since `vetted_commit_sha`. The security review covers that commit only: anything after it is unreviewed. `0` means the reviewed code is current. On a vetted listing whose `repo` has neither `commits_since_vetted` nor `vetted_commit_found`, drift is unknown (vetted tier only) (optional) | | `vetted_commit_found` | boolean | `false` when `vetted_commit_sha` is no longer in the default branch's history, so the reviewed code cannot be compared (vetted tier only) (optional) | | `checked_at` | date-time | When the site's build read this from GitHub. Refreshed whenever the site rebuilds, which can be days apart | When `repo` is absent, the health is unknown — the build could not reach GitHub — not fine. `found: false` means GitHub reported the repo missing. Stars and forks are popularity signals, not safety signals. For a vetted listing, the security review covers `vetted_commit_sha` only: `commits_since_vetted` above `0` is code nobody reviewed, and `vetted_commit_found: false` means the reviewed commit is no longer in the default branch's history. On a vetted listing whose `repo` has neither `commits_since_vetted` nor `vetted_commit_found`, drift is unknown (the check failed), so do not present its current code as the reviewed code. --- ## Trust tiers Values of `tier`: - `contributed` — passed automated validation and a baseline maintainer review - `vetted` — passed the Exchange Inspector security review process A vetted listing also carries `vetted_on` and `vetted_commit_sha`: the review covers that commit, not later changes. See https://exchange.tenable.com/security-review-process for full tier definitions. ## Controlled vocabularies Fields marked as drawing from a vocabulary only ever hold these exact strings. ### Integrations Values of `integrations`: Anthropic, AWS, Azure, Check Point, Cisco, CrowdStrike, Firebase, Fortinet, GCP, IPGeolocation.io, KnowBe4, Microsoft Sentinel, Mimecast, Netskope, NVD, PagerDuty, Palo Alto, Qualys, Rapid7, Recorded Future, SentinelOne, ServiceNow, Snyk, Splunk, Supabase, Tenable, Tenable Hexa AI MCP, URLScan.io, VirusTotal, Wiz, Checkmarx One, SecurityScorecard ### Domains Values of `domains`: - `ai-security` — AI Security - `application-security` — Application Security - `cloud-security` — Cloud Security - `cryptography-pki` — Cryptography & PKI - `data-security` — Data Security - `email-collaboration-security` — Email & Collaboration Security - `governance-risk-compliance` — Governance, Risk & Compliance - `identity-access` — Identity & Access - `network-security` — Network Security - `ot-iot-security` — OT/IoT Security - `platform-operations` — Platform Operations - `security-awareness` — Security Awareness - `security-operations` — Security Operations - `threat-intelligence` — Threat Intelligence - `vulnerability-management` — Vulnerability Management ### Platforms (skills) Values of `compatible_platforms`: Claude Code, Claude Desktop, Claude Cowork, Cline, Codex, Cursor, Gemini CLI, GitHub Copilot, LibreChat, Windsurf ### Transports (MCP servers) Values of `transport`: stdio, http, both ### Runtimes (MCP servers) Values of `runtime`: binary, bun, go, node, python, rust ### Auth methods (MCP servers) Values of `auth_method`: api-key, none, oauth2, token ### Clients (MCP servers) Values of `compatible_clients`: Antigravity, ChatGPT, Claude Code, Claude Desktop, Cline, Codex, Continue, Cursor, Gemini CLI, VS Code Copilot, Windsurf --- ## Examples An index row: ```json { "type": "agent", "slug": "chokepoint-finder", "name": "Chokepoint Finder", "author": "tarhou", "tier": "contributed", "domains": [ "vulnerability-management" ], "integrations": [ "AWS", "Tenable" ], "github_url": "https://github.com/tarhou/chokepoint-finder", "url": "https://exchange.tenable.com/agents/chokepoint-finder", "json_url": "https://exchange.tenable.com/api/agents/chokepoint-finder.json", "repo": { "found": true, "archived": false, "pushed_at": "2026-08-10T21:44:56Z", "stars": 0 }, "tags": [ "vuln-management", "exposure-management", "remediation", "prioritization", "attack-path-analysis", "set-cover", "change-management", "claude-code" ], "description": "Finds the smallest set of remediation actions that removes the largest share of risk, refuses to act on evidence it cannot read, and verifies the result before a change record closes." } ``` A detail record (MCP arrays shortened to two entries): ```json { "type": "mcp-server", "slug": "checkpoint-mcp-server", "name": "Check Point Management Write-Path MCP Server", "author": "tarhou", "description": "Draft/publish/install access-rule lifecycle for compensating-control workflows -- the write path Check Point's official read-only MCP does not expose.", "github_url": "https://github.com/tarhou/checkpoint-mcp-server", "license": "MIT", "tier": "contributed", "tags": [ "firewall", "compensating-controls", "check-point", "network-security", "python" ], "integrations": [ "Check Point" ], "domains": [ "network-security" ], "date_added": "2026-07-29", "last_reviewed": "2026-07-31", "works_with_tenable_hexa_mcp": false, "transport": "stdio", "runtime": "python", "auth_method": "none", "compatible_clients": [ "Claude Code", "Claude Desktop" ], "tools_exposed": [ { "name": "checkpoint_list_access_rules", "description": "List current rules in an access layer" }, { "name": "checkpoint_add_access_rule", "description": "Add a rule in the current session (status: draft until published)" } ], "resources_exposed": [], "prompts_exposed": [], "repo": { "found": true, "archived": false, "pushed_at": "2026-07-29T08:02:46Z", "stars": 0, "forks": 0, "open_issues": 0, "owner_type": "user", "language": "Python", "checked_at": "2026-11-05T20:35:15.821Z" }, "url": "https://exchange.tenable.com/mcp-servers/checkpoint-mcp-server", "json_url": "https://exchange.tenable.com/api/mcp-servers/checkpoint-mcp-server.json", "markdown_url": "https://exchange.tenable.com/mcp-servers/checkpoint-mcp-server.md", "source_url": "https://github.com/tenable/cyberagents-exchange/blob/main/mcp-servers/checkpoint-mcp-server.md" } ``` ## Source Every listing is a Markdown file in the public content repo, https://github.com/tenable/cyberagents-exchange; each detail record's `source_url` points at its file there. Listings are submitted and reviewed as pull requests to that repo — see its CONTRIBUTING.md. ## Tips for LLMs - Fetch with a raw HTTP client (`curl`, `requests`, `fetch`) and parse the JSON yourself; tools that summarise a page through a model can drop or paraphrase rows. - Send a `User-Agent` header. Python's bare `urllib` default (`Python-urllib/3.x`) is rejected with 403. - Start from the manifest, then read the index files for the types you need. Each file is at most 90000 bytes: fetch it whole with a raw HTTP client, or `grep` it, or stream the JSONL. Fetch detail records only for listings you are about to recommend or describe. - Skip listings whose `repo.archived` is `true` unless asked for them, and flag a vetted listing whose `repo.commits_since_vetted` is above `0`: its current code is not what was reviewed. - To recommend an MCP server, filter the index on `"type": "mcp-server"`, then read each candidate's `tools_exposed` and `compatible_clients` from its detail record. - `integrations` and `domains` hold exact vocabulary strings, so match them exactly. - Prefer `vetted` listings when trust matters, and say which tier a listing has when you recommend it. - Listings are metadata. The code, and its own documentation, is at `github_url`.