API Evangelist MCP
Provides access to 16 years of independent API research, including blog posts, governance rules, strategies, and vocabulary. It offers 17 tools for retrieving overviews, guiding topics, and accessing the federated network of knowledge bases built on 5,000+ blog posts.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.apievangelist.com/mcpWhat its tools do
83 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (81)
get_overviewguide_topicfind_servicesget_servicefind_solutionsget_solutionfind_toolsget_toolget_contactsearch_api_evangelistfind_postsget_postfind_areasget_areafind_building_blocksget_building_blockfind_conversationsget_conversationfind_papersget_paperfind_videosget_videoget_timelineget_guidance_sectionfind_vocabularyget_feedsfind_tagsget_tagfind_relatedget_statsfind_company_insightsinsights_dimensionsinsights_adoptionget_company_insightcompany_gapscompany_dimensionscompany_peerscompany_whitespacecompany_signalsfind_entitiesentity_demandfind_measured_standardsstandard_adoptionstandard_coalitionstandard_repositoriesvalidate_apiapi_coveragereconcile_waiversgovernance_reportverify_certificateclassify_api_fieldsdiff_api_versionsapi_scorecardgovern_estatedeprecation_posturevalidate_onboardingcertify_apiexport_agent_rulesaudit_pipelineforge_mcp_toolsgate_agent_contextapply_overlaymock_payloadscode_snippetsscore_reusabilitymap_api_experiencegenerate_agent_descriptorvalidate_rulesetquery_jsonpathtest_rulesetexplain_rule_resultdescribe_ruledetect_formatlint_agent_skilldocument_rulesetbaseline_violationsfederate_rulesetsfingerprint_generatorfix_diagnosticsruleset_from_style_guideget_org_ruleset
Can change data (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to apievangelist.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Retrieve API governance rules and policies
- Access API strategy patterns and vocabularies
- Search the 16-year blog archive for API insights
- Get guided topic concierge assistance
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- api-evangelist 1.2.0
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 83 advertised
- Resources
- 5 advertised
- Resource templates
- 5 advertised
- Prompts
- 32 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
83 advertised
get_overview
START HERE. What the API Evangelist network offers: sixteen years of API research as searchable stories, 77 topic areas, governance building blocks (guidance, rules, policies, standards, strategies), papers, conversations, and the consulting services Kin Lane offers teams. Returns counts, entry points, and how to engage.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Overview of API Evangelist",
"readOnlyHint": true,
"openWorldHint": false
}guide_topic
PRO — Curated guide to one API topic (e.g. "gateways", "api governance", "discovery", "agents"). Bundles the matching topic area (with related areas), top guidance, rules, policies, and standards, relevant papers and recent stories, plus the API Evangelist services that can help a team with this topic.
{
"type": "object",
"required": [
"topic"
],
"properties": {
"topic": {
"type": "string",
"description": "The topic to build a guide for."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Topic guide",
"readOnlyHint": true,
"openWorldHint": false
}find_services
The services API Evangelist offers teams and customers — API strategy, governance, discovery, and evangelism engagements by Kin Lane. The front door to working with API Evangelist. (For the third-party vendor registry, use find_solutions.)
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find services",
"readOnlyHint": true,
"openWorldHint": false
}get_service
Full detail for one service offering by slug; include=["content"] inlines the full pitch.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Service slug, as find_services returns it, e.g. \"governance-agent-readiness\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"include": {
"type": "array",
"items": {
"enum": [
"content"
]
},
"description": "Pass [\"content\"] to inline the full body (Pro). Omitted, you get the summary."
}
}
}{
"title": "Get service",
"readOnlyHint": true,
"openWorldHint": false
}find_solutions
The solutions registry — 740+ third-party API services and tools (gateways, portals, testing, monitoring, …) ranked by adoption across the companies API Evangelist tracks.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find solutions",
"readOnlyHint": true,
"openWorldHint": false
}get_solution
One solution from the vendor registry by slug, with its website and adoption count.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Solution (vendor) slug, as find_solutions returns it, e.g. \"adobe\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Get solution",
"readOnlyHint": true,
"openWorldHint": false
}find_tools
The open-source tooling registry — 400+ tools in use across the companies API Evangelist tracks, each with adoption counts and technology-radar placement.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find tools",
"readOnlyHint": true,
"openWorldHint": false
}get_tool
One tool from the tooling registry by slug, with its website, adoption count, and radar ring.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Tool slug, as find_tools returns it, e.g. \"ajv\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Get tool",
"readOnlyHint": true,
"openWorldHint": false
}get_contact
Every way to reach API Evangelist — email, contact form, newsletter, GitHub, social channels, and postal mail.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Contact Kin Lane",
"readOnlyHint": true,
"openWorldHint": false
}search_api_evangelist
Unified search across the whole network: 5k+ stories, 77 topic areas, 2.5k governance building blocks, papers, conversations, videos, tools, timelines, services, and vocabulary. Filter with types (posts, areas, guidance, rules, policies, standards, strategies, schema, properties, experiences, lifecycle, conversations, videos, papers, services, solutions, tools, timelines, vocabulary).
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Content types to include — plural resource names: posts, services, solutions, tools, areas, papers, videos, conversations, guidance, rules, policies, standards, strategies…, e.g. [\"posts\",\"papers\"]."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Search API Evangelist",
"readOnlyHint": true,
"openWorldHint": false
}find_posts
Search or browse 5,100+ API Evangelist stories (2010–present); filter by year or tags.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"year": {
"type": "string",
"description": "Four-digit year; only posts whose date starts with it, e.g. \"2024\"."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find posts",
"readOnlyHint": true,
"openWorldHint": false
}get_post
One story by slug (YYYY-MM-DD-slug); include=["content"] returns the full markdown body.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Post slug — date-prefixed, as find_posts returns it, e.g. \"2026-09-29-you-cannot-see-your-own-api-from-the-outside\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"include": {
"type": "array",
"items": {
"enum": [
"content"
]
},
"description": "Pass [\"content\"] to inline the full body (Pro). Omitted, you get the summary."
}
}
}{
"title": "Get post",
"readOnlyHint": true,
"openWorldHint": false
}find_areas
The 77 focused topic areas of the network (agents, gateways, security, …), each a subsite with its own catalog.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find areas",
"readOnlyHint": true,
"openWorldHint": false
}get_area
One topic area with its related-area graph resolved — walk the network from here.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Area slug, as find_areas returns it, e.g. \"agents\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Get area",
"readOnlyHint": true,
"openWorldHint": false
}find_building_blocks
Search the governance building blocks by type: guidance (177), rules (617), policies (283), standards (432), strategies (75), schema (11), properties (790), experiences (46), lifecycle (29).
{
"type": "object",
"required": [
"type"
],
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"type": {
"enum": [
"guidance",
"rules",
"policies",
"standards",
"strategies",
"schema",
"properties",
"experiences",
"lifecycle"
],
"type": "string",
"description": "Building-block type: guidance, rules, policies, standards, strategies, schema, properties, experiences or lifecycle."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find building blocks",
"readOnlyHint": true,
"openWorldHint": false
}get_building_block
One building block by type + slug; include=["content"] returns the full body.
{
"type": "object",
"required": [
"type",
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Building-block slug within `type`, as find_building_blocks returns it, e.g. \"access\" with type \"guidance\"."
},
"type": {
"enum": [
"guidance",
"rules",
"policies",
"standards",
"strategies",
"schema",
"properties",
"experiences",
"lifecycle"
],
"type": "string",
"description": "Building-block type: guidance, rules, policies, standards, strategies, schema, properties, experiences or lifecycle."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"include": {
"type": "array",
"items": {
"enum": [
"content"
]
},
"description": "Pass [\"content\"] to inline the full body (Pro). Omitted, you get the summary."
}
}
}{
"title": "Get building block",
"readOnlyHint": true,
"openWorldHint": false
}find_conversations
API Evangelist Conversations — recorded discussions with API practitioners (guest, company, YouTube/SoundCloud links).
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find conversations",
"readOnlyHint": true,
"openWorldHint": false
}get_conversation
One conversation with guest detail and media links; include=["content"] returns the writeup.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Conversation slug — date-prefixed, as find_conversations returns it, e.g. \"2026-09-01-lukasz-gornicki\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"include": {
"type": "array",
"items": {
"enum": [
"content"
]
},
"description": "Pass [\"content\"] to inline the full body (Pro). Omitted, you get the summary."
}
}
}{
"title": "Get conversation",
"readOnlyHint": true,
"openWorldHint": false
}find_papers
API Evangelist papers — single-PDF deep dives on one practice or topic, with outlines.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find papers",
"readOnlyHint": true,
"openWorldHint": false
}get_paper
One paper with its full outline and purchase/landing URL.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Paper slug, as find_papers returns it, e.g. \"change-on-the-agent-surface\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Get paper",
"readOnlyHint": true,
"openWorldHint": false
}find_videos
The API Evangelist video library — interviews and discussions from across the API space, searchable by transcript.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find videos",
"readOnlyHint": true,
"openWorldHint": false
}get_video
One video by slug with its YouTube id; include=["content"] returns the full transcript.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Video slug, as find_videos returns it, e.g. \"adam-duvander\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"include": {
"type": "array",
"items": {
"enum": [
"content"
]
},
"description": "Pass [\"content\"] to inline the full body (Pro). Omitted, you get the summary."
}
}
}{
"title": "Get video",
"readOnlyHint": true,
"openWorldHint": false
}get_timeline
One of the four research timelines in chronological order: api (the moments that shaped web APIs), resources (which digital resources became APIs and when), industries (the industrial history framing API infrastructure), people (the people who made compute and APIs possible).
{
"type": "object",
"required": [
"timeline"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"timeline": {
"enum": [
"api",
"resources",
"industries",
"people"
],
"type": "string",
"description": "Which timeline: api, resources, industries or people."
}
}
}{
"title": "Get timeline",
"readOnlyHint": true,
"openWorldHint": false
}get_guidance_section
One editorial guidance section as a list: history, technology, business, politics, governance, or evangelism — the six lenses API Evangelist organizes guidance through.
{
"type": "object",
"required": [
"section"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"section": {
"enum": [
"history",
"technology",
"business",
"politics",
"governance",
"evangelism"
],
"type": "string",
"description": "Guidance section: history, technology, business, politics, governance or evangelism."
}
}
}{
"title": "Get guidance section",
"readOnlyHint": true,
"openWorldHint": false
}find_vocabulary
The API vocabulary — thousands of resources, actions, personas, domains, schemas, and tags extracted from the API landscape. Filter by category.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text over title, summary, tags, and body."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"default",
"title",
"date"
],
"type": "string",
"description": "Order when there is no `q`: \"default\" (dated content newest first, the rest A-Z), \"title\" (A-Z) or \"date\" (newest first). A `q` always orders by relevance."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag slugs; match any by default."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"match": {
"enum": [
"any",
"all"
],
"type": "string",
"default": "any",
"description": "How multiple `tags` combine: \"any\" (default, at least one) or \"all\" (every tag)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Return only these keys on each record, e.g. [\"slug\",\"title\",\"url\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"category": {
"enum": [
"resources",
"actions",
"personas",
"domains",
"schemas",
"tags"
],
"type": "string",
"description": "Vocabulary category: resources, actions, personas, domains, schemas or tags."
}
}
}{
"title": "Find vocabulary",
"readOnlyHint": true,
"openWorldHint": false
}get_feeds
The static machine-readable feeds every network site publishes (JSON, APIs.json, zero-auth) — the no-key alternative to this API.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Feeds",
"readOnlyHint": true,
"openWorldHint": false
}find_tags
Browse and rank the network tag taxonomy — every subject tag across 16k+ docs, by frequency or breadth (how many content types use it). Search with q. The map of what API Evangelist covers.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text matched against tag labels, e.g. \"governance\"."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"sort": {
"enum": [
"count",
"breadth"
],
"type": "string",
"description": "\"count\" (default, most-used first) or \"breadth\" (spread across the most content types)."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find tags",
"readOnlyHint": true,
"openWorldHint": false
}get_tag
One tag with its per-type counts and everything it labels across the whole network (stories, areas, guidance, papers, …). Filter with types.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"slug": {
"type": "string",
"description": "Tag slug, as find_tags returns it, e.g. \"apis\"."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only return tagged items of these types, e.g. [\"posts\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Get tag",
"readOnlyHint": true,
"openWorldHint": false
}find_related
Given any doc (type + slug), the most related content across the whole network, ranked by shared-tag relevance (rare, specific tags weigh most). "More like this," across stories, areas, guidance, papers, conversations, and more.
{
"type": "object",
"required": [
"type",
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Slug of the item to find related content for, within `type`, e.g. \"2026-09-29-you-cannot-see-your-own-api-from-the-outside\"."
},
"type": {
"type": "string",
"description": "Content type of the item `slug` names — the plural path name: posts, services, solutions, tools, areas, papers, videos, conversations, guidance…, e.g. \"posts\"."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only return related items of these types, e.g. [\"papers\",\"posts\"]."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find related",
"readOnlyHint": true,
"openWorldHint": false
}get_stats
PRO — catalog intelligence: per-type counts, stories-per-year, and the top tags by reach across the network.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Catalog stats",
"readOnlyHint": true,
"openWorldHint": false
}find_company_insights
Browse profiled companies (Fortune 1000 + API providers) by name; ranked by technology-readiness signal. Free.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text matched against company name, e.g. \"chase\"."
},
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find company insights",
"readOnlyHint": true,
"openWorldHint": false
}insights_dimensions
Cross-section ranking of the 40 tracked investment dimensions (AI, cloud, governance, …) by company signal. Free.
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Insights dimensions",
"readOnlyHint": true,
"openWorldHint": false
}insights_adoption
Services, tools, or standards ranked by how many companies adopt them. Free.
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"type": {
"enum": [
"service",
"tool",
"standard"
],
"type": "string",
"default": "service",
"description": "What to rank by adoption across the companies: \"service\" (default), \"tool\" or \"standard\"."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Insights adoption",
"readOnlyHint": true,
"openWorldHint": false
}get_company_insight
Full demand-side profile for one company: 40-dimension readiness, adopted stack, per-quarter history. Pro.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Company slug, as find_company_insights returns it, e.g. \"jp-morgan-chase\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Get company insight",
"readOnlyHint": true,
"openWorldHint": false
}company_gaps
A company's weakest investment dimensions — where it is thin. Pro.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Company slug, as find_company_insights returns it, e.g. \"jp-morgan-chase\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Company gaps",
"readOnlyHint": true,
"openWorldHint": false
}company_dimensions
PRO — a company's investment dimensions, each read AGAINST the measured cohort: the cohort median, mean and max, this company's rank and percentile, and an index where 1.0 is exactly typical. A raw dimension score is unreadable on its own; these are the columns that make it mean something.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Company slug, as find_company_insights returns it, e.g. \"jp-morgan-chase\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Company dimensions",
"readOnlyHint": true,
"openWorldHint": false
}company_peers
PRO — the companies most comparable to this one (same sub-sector where the data supports it, same industry otherwise), each with signal totals and top dimensions. The response says which basis it used.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Company slug, as find_company_insights returns it, e.g. \"jp-morgan-chase\"."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "How many peers to return, 1-100."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Company peers",
"readOnlyHint": true,
"openWorldHint": false
}company_whitespace
PRO — what this company's peers run that it does not, ranked by how many peers carry it. The opening list for a vendor selling into the account.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Company slug, as find_company_insights returns it, e.g. \"jp-morgan-chase\"."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "How many whitespace rows to return, 1-200."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Company whitespace",
"readOnlyHint": true,
"openWorldHint": false
}company_signals
PRO — the company's adopted stack entity by entity (services, tools, standards), each with how many companies across the cohort carry it and its radar ring.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Company slug, as find_company_insights returns it, e.g. \"jp-morgan-chase\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Company signals",
"readOnlyHint": true,
"openWorldHint": false
}find_entities
Browse the demand-side entity catalog — every service, tool and standard companies are measured against, ranked by how many carry it. Free. This is the left-hand side of the inversion: pick an entity here, then call entity_demand to see WHO.
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Substring match on the entity name."
},
"kind": {
"enum": [
"service",
"tool",
"standard"
],
"type": "string",
"description": "Entity kind: \"service\", \"tool\" or \"standard\"."
},
"page": {
"type": "integer",
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"min_companies": {
"type": "integer",
"description": "Only entities carried by at least this many companies."
}
}
}{
"title": "Find entities",
"readOnlyHint": true,
"openWorldHint": false
}entity_demand
PRO — THE INVERSION. Every other insights tool runs company -> stack; this one runs stack -> companies: which companies show demand for a given service, tool or standard, broken down by industry. This is the prospecting query — "who should I be selling this to" — and it exists in no report, bundle or page. Returns BOTH the authoritative company count and the companies it can actually name, with the basis difference explained.
{
"type": "object",
"required": [
"kind",
"slug"
],
"properties": {
"kind": {
"enum": [
"service",
"tool",
"standard"
],
"type": "string",
"description": "Entity kind: \"service\", \"tool\" or \"standard\"."
},
"slug": {
"type": "string",
"description": "Entity slug or display name — either resolves (\"spark\" and \"Apache Spark\" both work)."
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "How many named companies to return, 1-500."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"industry": {
"type": "string",
"description": "Restrict the named companies to one industry."
}
}
}{
"title": "Entity demand",
"readOnlyHint": true,
"openWorldHint": false
}find_measured_standards
The standards bodies API Evangelist has actually MEASURED — repositories, maturity, governance, coalition. Distinct from find_standards, which searches 613 catalog entries describing what a standard IS. Free.
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Find measured standards",
"readOnlyHint": true,
"openWorldHint": false
}standard_adoption
How far a standards body actually got: repositories published, how many graduated past unclassified and the resulting share, release cadence, contributor count — with the provenance of every figure and an explicit list of what is NOT measured. Free, because a specification is a public good.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Standards body slug, as find_measured_standards returns it, e.g. \"asyncapi\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Standard adoption",
"readOnlyHint": true,
"openWorldHint": false
}standard_coalition
Who is actually behind a standard: the governing bodies and their membership, the working groups, the member companies, and the named people. Carries the caveats where our machine-readable source disagrees with the body's own published roster. Free.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Standards body slug, as find_measured_standards returns it, e.g. \"asyncapi\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Standard coalition",
"readOnlyHint": true,
"openWorldHint": false
}standard_repositories
Every repository a standards body publishes, with maturity, stars, forks, open issues and archived status. Free.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"page": {
"type": "integer",
"description": "Page number, 1-based (default 1). Use with `limit` to walk a long list."
},
"slug": {
"type": "string",
"description": "Standards body slug, as find_measured_standards returns it, e.g. \"asyncapi\"."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Results per page, 1-100 (default 25)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
}
}{
"title": "Standard repositories",
"readOnlyHint": true,
"openWorldHint": false
}validate_api
Lint an OpenAPI, AsyncAPI, Arazzo, or JSON Schema document against the curated best-of-breed ruleset (Spectral) and return the findings. Pass your own `ruleset` to run rules you own instead of the catalog — which is what you should do before gating on anything.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Lint an API description",
"readOnlyHint": true,
"openWorldHint": false
}api_coverage
Measure how much of an API description your governance actually inspects — coverage by section, each rule's reach, and the rules that match nothing. Like test coverage, one altitude up.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Governance coverage",
"readOnlyHint": true,
"openWorldHint": false
}reconcile_waivers
Reconcile a waivers file against lint output: suppress sanctioned violations and surface the expired, stale, and expiring ones. Returns the effective failing set a build should gate on.
{
"type": "object",
"required": [
"waivers",
"violations"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"waivers": {
"type": [
"string",
"object"
],
"description": "The waivers file to reconcile — sanctioned violations, with expiry."
},
"violations": {
"type": [
"array",
"object",
"string"
],
"description": "Lint output to reconcile against the waivers. An array of findings, or the object a linter returned."
}
},
"additionalProperties": true
}{
"title": "Reconcile waivers",
"readOnlyHint": true,
"openWorldHint": false
}governance_report
Turn Spectral findings into a self-contained HTML governance report — severity summary, grouped by rule, framed toward progress.
{
"type": "object",
"required": [
"results"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"results": {
"type": [
"array",
"object"
],
"description": "Spectral findings to render. An array, or the `{ results: [...] }` object a run returned."
}
},
"additionalProperties": true
}{
"title": "Governance HTML report",
"readOnlyHint": true,
"openWorldHint": false
}verify_certificate
Re-verify a governance certificate against the API it attests to. If the API drifted or the certificate was forged, verification fails.
{
"type": "object",
"required": [
"certificate",
"api"
],
"properties": {
"api": {
"type": [
"string",
"object"
],
"description": "The API description being attested or verified. String or parsed object."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"certificate": {
"type": [
"string",
"object"
],
"description": "The governance certificate to re-verify. Alias: `cert`."
}
},
"additionalProperties": true
}{
"title": "Verify a governance certificate",
"readOnlyHint": true,
"openWorldHint": false
}classify_api_fields
Inventory the PII, secret, and sensitive fields an OpenAPI exposes, across parameters and request/response schemas. Run this before exposing an API to agents.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Classify sensitive API fields",
"readOnlyHint": true,
"openWorldHint": false
}diff_api_versions
Compare two OpenAPI versions and classify every change as breaking, non-breaking, or an addition — at path, operation, parameter, request-body, and response granularity.
{
"type": "object",
"required": [
"old",
"new"
],
"properties": {
"new": {
"type": [
"string",
"object"
],
"description": "The CANDIDATE version to compare against the baseline. Aliases: `to`, `revision`."
},
"old": {
"type": [
"string",
"object"
],
"description": "The BASELINE version of the document. Aliases: `from`, `base`."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Diff two API versions",
"readOnlyHint": true,
"openWorldHint": false
}api_scorecard
Score an API's maturity 0-100 with a letter grade across design, governance coverage, documentation, and (from an apis.json) discoverability, agent-readiness, and operations. Pass your own `ruleset` — a score against rules you never adopted means little.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "API scorecard",
"readOnlyHint": true,
"openWorldHint": false
}govern_estate
PRO — Run the core governance checks across a WHOLE SET of internal APIs and roll them up: per-API score/grade/errors/PII, plus estate aggregates (avg score, grade distribution, APIs with PII/secrets) and a worst-first punch-list of what to fix. Pass `apis` ([{id, document}]) and your own `ruleset`. detail:true adds per-API dimensions.
{
"type": "object",
"required": [
"apis"
],
"properties": {
"apis": {
"type": "array",
"items": {
"type": "object"
},
"description": "The estate: one entry per API, [{ id, document }]. `document` alone is accepted for a single API."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Govern an API estate",
"readOnlyHint": true,
"openWorldHint": false
}deprecation_posture
Report every deprecated operation and whether it actually announces a sunset. The ones that go quiet are the ones that break consumers.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Deprecation posture",
"readOnlyHint": true,
"openWorldHint": false
}validate_onboarding
Validate an API Onboarding Descriptor (AID) against the api-commons schema and report which optional sections it fills in.
{
"type": "object",
"required": [
"descriptor"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"descriptor": {
"type": [
"string",
"object"
],
"description": "An API Onboarding Descriptor (AID) to validate. Aliases: `aid`, `document`."
}
},
"additionalProperties": true
}{
"title": "Validate an onboarding descriptor",
"readOnlyHint": true,
"openWorldHint": false
}certify_api
Issue a tamper-evident governance certificate attesting an API passed a named ruleset at a profile threshold. A SHA-256 fingerprint lets anyone re-verify it.
{
"type": "object",
"required": [
"api"
],
"properties": {
"api": {
"type": [
"string",
"object"
],
"description": "The API description being attested or verified. String or parsed object."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Certify an API",
"readOnlyHint": true,
"openWorldHint": false
}export_agent_rules
Turn a governance ruleset into agent-native guidance — an AGENTS.md block, a system-prompt set, a per-rule remediation pack, and a digest — so agents follow the rules while authoring, not after linting.
{
"type": "object",
"required": [
"ruleset"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"ruleset": {
"type": "object",
"description": "A Spectral ruleset to run instead of the catalog default. Score against rules you never adopted means little — pass your own."
}
},
"additionalProperties": true
}{
"title": "Export rules for agents",
"readOnlyHint": true,
"openWorldHint": false
}audit_pipeline
Score a repository's Spectral CI setup against an 8-point maturity rubric and return a prioritized punch-list. Pass a public `repo` ("owner/name") or `files`.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Audit a governance pipeline",
"readOnlyHint": true,
"openWorldHint": true
}forge_mcp_tools
From an OpenAPI, forge an MCP server design, per-operation tools, Agent Skills, an enriched OpenAPI, a server.json, and apis.json properties.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Forge MCP tools from OpenAPI",
"readOnlyHint": true,
"openWorldHint": false
}gate_agent_context
Choose which operations and fields an API exposes to agents and emit a governed Tyk OpenAPI, an MCP tool manifest, and a Spectral ruleset with PII and secret checks.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Gate agent context",
"readOnlyHint": true,
"openWorldHint": false
}apply_overlay
Apply an OpenAPI Overlay to a document and report what each action matched. Use it for deprecation and migration choreography without forking the contract.
{
"type": "object",
"required": [
"document",
"overlay"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"overlay": {
"type": [
"string",
"object"
],
"description": "An OpenAPI Overlay document whose actions are applied to `document`."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Apply an OpenAPI Overlay",
"readOnlyHint": true,
"openWorldHint": false
}mock_payloads
Generate an example request and success-response payload for every operation from its schema.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Mock payloads",
"readOnlyHint": true,
"openWorldHint": false
}code_snippets
Generate runnable curl, JavaScript, and Python samples for every operation, with path params filled in and a realistic body.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Code snippets",
"readOnlyHint": true,
"openWorldHint": false
}score_reusability
Score how reusable a set of APIs is and detect duplication across them — the anti-sprawl view of an estate.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Score reusability",
"readOnlyHint": true,
"openWorldHint": false
}map_api_experience
Map each REST operation to its MCP tool and Agent Skill — the API -> MCP -> Agent-Skill chain — from an APIs.json, with a free/paid coverage scorecard and a flow map.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Map the API experience",
"readOnlyHint": true,
"openWorldHint": false
}generate_agent_descriptor
Generate an API's llms.txt and an AGENTS.md consumption contract — base URL, auth, the operation table, deprecated operations to avoid, and usage rules.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Generate llms.txt + AGENTS.md",
"readOnlyHint": true,
"openWorldHint": false
}validate_ruleset
Check that an OpenLint/Spectral ruleset is valid BEFORE running or storing it: invalid JSONPath, unknown functions, undefined aliases, and anything the engine rejects. Catalog metadata (title, prompt, x-*) is set aside and reported. Run this on every ruleset you write.
{
"type": "object",
"required": [
"ruleset"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"ruleset": {
"type": "object",
"description": "A Spectral ruleset to run instead of the catalog default. Score against rules you never adopted means little — pass your own."
}
},
"additionalProperties": true
}{
"title": "Validate a ruleset",
"readOnlyHint": true,
"openWorldHint": false
}query_jsonpath
Evaluate a JSONPath (a rule's `given`) against a document and return what it matches — pointers, values, and optionally whether `field` is present on each match. The fastest way to get a `given` right.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Query a JSONPath",
"readOnlyHint": true,
"openWorldHint": false
}test_ruleset
Run a ruleset against fixture documents with expectations — codes that must fire, exact counts, or a clean lint — and report pass/fail per case plus which rules no case asserts on or ever triggers.
{
"type": "object",
"required": [
"ruleset",
"cases"
],
"properties": {
"cases": {
"type": "array",
"items": {
"type": "object"
},
"description": "Fixtures: [{ name, document, expect }] where `expect` is a list of rule codes that must fire, a { code: count } map, or [] for a clean lint. Optional `forbid`: codes that must not fire."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"ruleset": {
"type": "object",
"description": "A Spectral ruleset to run instead of the catalog default. Score against rules you never adopted means little — pass your own."
}
},
"additionalProperties": true
}{
"title": "Test a ruleset against fixtures",
"readOnlyHint": true,
"openWorldHint": false
}explain_rule_result
Explain why a rule did or did not fire on a document: whether its formats matched, what its `given` matched, what `then` checked, and the verdict. Works for your own rules, the catalog, and the built-ins.
{
"type": "object",
"required": [
"document",
"rule"
],
"properties": {
"rule": {
"type": "string",
"description": "A rule id, e.g. \"info-require-license\" or \"operation-operationId\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Explain a rule result",
"readOnlyHint": true,
"openWorldHint": false
}describe_rule
Look up one rule by id — description, severity, given/then, reference — and its remediation prompt: what to change when it fires. Suggests close matches for an unknown id.
{
"type": "object",
"required": [
"rule"
],
"properties": {
"rule": {
"type": "string",
"description": "A rule id, e.g. \"info-require-license\" or \"operation-operationId\"."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Describe a rule",
"readOnlyHint": true,
"openWorldHint": false
}detect_format
Identify a document: OpenAPI (Swagger 2.0 vs 3.x), AsyncAPI, Arazzo, JSON Schema, APIs.json, MCP, an agent SKILL.md, an Overlay or a ruleset — and how many catalog rules and which named profiles apply.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Detect a document format",
"readOnlyHint": true,
"openWorldHint": false
}lint_agent_skill
Lint an agent SKILL.md (markdown with YAML frontmatter) against the API Commons skill rules — name, description, structure, metadata.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Lint an agent skill",
"readOnlyHint": true,
"openWorldHint": false
}document_ruleset
Generate human-readable Markdown documentation for a ruleset — each rule's severity, what it checks, its message and how to fix it. Pass `ruleset`, or `profile` for a curated one (owasp, problem-details, fhir, api-authorization).
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Document a ruleset",
"readOnlyHint": true,
"openWorldHint": false
}baseline_violations
PRO — Adopt a ruleset on a legacy API without a wall of red: snapshot today's violations as a baseline, then pass that baseline back to fail only on NEW violations (with fixed counts, a warning budget and burndown).
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Baseline violations",
"readOnlyHint": true,
"openWorldHint": false
}federate_rulesets
PRO — Model a central baseline ruleset and the domains that adopt it (inherit / override / waive / defer / local rules) and compute divergence per rule, drift per domain, and local rules worth promoting.
{
"type": "object",
"required": [
"federation"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"federation": {
"type": [
"string",
"object"
],
"description": "The federation model: { central: { rules: [{ code, severity }] }, domains: [{ id, adoptions: [{ code, state, severity?, reason? }] }] }. YAML/JSON string or object."
}
},
"additionalProperties": true
}{
"title": "Federate rulesets",
"readOnlyHint": true,
"openWorldHint": false
}fingerprint_generator
PRO — For a code-first API: identify which OpenAPI generator produced the spec, and split findings into those to fix with code annotations vs. spec authoring, with per-generator remediation.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Fingerprint the OpenAPI generator",
"readOnlyHint": true,
"openWorldHint": false
}fix_diagnostics
PRO — Propose an OpenAPI Overlay that fixes the lint errors (or the `rules` you name), apply it, re-lint, and report what was resolved, what newly fires, and any breaking change. Review the overlay before applying it.
{
"type": "object",
"required": [
"document"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"document": {
"type": [
"string",
"object"
],
"description": "The API description to operate on — OpenAPI, AsyncAPI, Arazzo or JSON Schema. A YAML/JSON string or an already-parsed object; both are accepted."
}
},
"additionalProperties": true
}{
"title": "Fix lint findings",
"readOnlyHint": true,
"openWorldHint": false
}ruleset_from_style_guide
PRO — Turn a prose API style guide into an owned, grounded ruleset: one rule per checkable statement, each validated, with the statements no rule can check listed separately. Test the result with test_ruleset.
{
"type": "object",
"required": [
"guide"
],
"properties": {
"guide": {
"type": "string",
"description": "The API style guide as prose or Markdown (up to 40 KB)."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Ruleset from a style guide",
"readOnlyHint": true,
"openWorldHint": false
}get_org_ruleset
PRO — Read your org default ruleset: the one every governance call without its own `ruleset` runs against.
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
}
},
"additionalProperties": true
}{
"title": "Get the org ruleset",
"readOnlyHint": true,
"openWorldHint": false
}set_org_ruleset
PRO — Store an org default ruleset (validated first). From then on validate, coverage, scorecard, estate, baseline, codefirst and fix use it whenever no `ruleset` is passed.
{
"type": "object",
"required": [
"ruleset"
],
"properties": {
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"ruleset": {
"type": "object",
"description": "A Spectral ruleset to run instead of the catalog default. Score against rules you never adopted means little — pass your own."
}
},
"additionalProperties": true
}{
"title": "Set the org ruleset",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}submit_api_evangelist_feedback
Report something wrong with a result: wrong data, a filter that did not filter, a ranking that put off-topic results first, a number you could not reproduce, or an answer that was useless for your task. Free, and the fastest way to get a defect fixed — the support sweep reads the log this lands in. Say what you expected as well as what you got.
{
"type": "object",
"required": [
"problem"
],
"properties": {
"tool": {
"type": "string",
"description": "Optional name of the tool that produced it."
},
"about": {
"type": "string",
"description": "Optional slug, area, paper or story the report concerns."
},
"context": {
"type": "string",
"description": "Optional: why you are asking. One sentence — the task you are trying to complete, or what you expect to get back. Never included in the answer and never used to rank; it is read only when a result turns out to be wrong, which is when knowing the intent is what makes the report actionable."
},
"problem": {
"type": "string",
"description": "What was wrong. Be specific — the tool you called, the arguments, and what came back."
},
"expected": {
"type": "string",
"description": "What you expected instead."
},
"severity": {
"enum": [
"wrong",
"misleading",
"unhelpful"
],
"type": "string",
"description": "wrong = factually incorrect; misleading = correct but reads as something else; unhelpful = right and useless."
}
}
}{
"title": "Send feedback (free)",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
32 advertised
where_can_ae_help
Map a team's API need to where API Evangelist can help — the relevant research areas and the services Kin Lane offers.
- need
- What your team is trying to do or struggling with (required)
catch_up
Catch up on a topic — the most recent API Evangelist stories about it, newest first.
- topic
- The topic to catch up on (required)
research_topic
PRO — Deep-research one API topic: the curated guide bundle plus the full research bodies behind it.
- topic
- The topic to research in depth (required)
governance_starter_kit
PRO — Assemble an API governance starter kit for a team: the guidance, rules, policies, and standards that matter, plus how Kin can help stand it up.
- focus
- Optional focus, e.g. "security", "versioning", "design" (blank = general)
vendor_landscape
PRO — Map the vendor + tooling landscape for an API capability, from the solutions (740+) and tools (400+) registries.
- capability
- The capability, e.g. "api gateway", "monitoring", "testing" (required)
make_my_api_agent_ready
PRO — Take one OpenAPI from scored to agent-ready: scorecard, PII scan, forged MCP tools, and a consumption contract.
- openapi_url
- URL of your OpenAPI spec (required)
agent_ready_audit
A free first pass on agent-readiness — score the API and scan it for exposure, then see what generation would add.
- openapi_url
- URL of the OpenAPI spec (required)
forge_mcp_server
PRO — Turn one OpenAPI into an MCP server design: tools, Agent Skills, and an apis.json.
- openapi_url
- URL of the OpenAPI spec (required)
generate_consumption_contract
PRO — Generate the llms.txt + AGENTS.md consumption contract for an API.
- openapi_url
- URL of the OpenAPI spec (required)
mock_and_snippets
PRO — Generate example payloads and curl/JS/Python snippets per operation, so an API is instantly try-able.
- openapi_url
- URL of the OpenAPI spec (required)
govern_my_estate
PRO — Run governance across a whole set of APIs and roll up a worst-first punch list.
- openapi_urls
- Comma-separated OpenAPI URLs (the estate) (required)
- ruleset_url
- Optional shared Spectral ruleset URL
make_internal_apis_agent_safe
PRO — Make an internal API safe for agents: classify exposure, gate the context, certify, and export the rules.
- openapi_url
- URL of the internal OpenAPI spec (required)
governance_baseline
Establish a governance baseline for one API: lint, coverage, and a maturity score.
- openapi_url
- URL of the OpenAPI spec (required)
- ruleset_url
- Optional Spectral ruleset URL
pipeline_audit
PRO — Audit whether a repo's CI actually governs its API: score its Spectral pipeline.
- repo
- The GitHub repo to audit, e.g. owner/name (required)
classify_exposure
Inventory the PII, secrets, and sensitive fields in an OpenAPI — what an agent must not see.
- openapi_url
- URL of the OpenAPI spec (required)
certify_and_prove
PRO — Issue a tamper-evident governance certificate for an API, and verify it.
- openapi_url
- URL of the OpenAPI spec (required)
- ruleset_url
- Optional ruleset URL the certificate attests against
apply_governance_overlay
PRO — Apply an OpenAPI Overlay to a spec and report exactly what it changed.
- openapi_url
- URL of the base OpenAPI spec (required)
- overlay_url
- URL of the Overlay document (required)
version_change_review
Review what changed between two API versions and whether deprecations are handled well.
- old_url
- URL of the previous OpenAPI version (required)
- new_url
- URL of the new OpenAPI version (required)
waivers_review
Reconcile a waivers file against current lint output — which exceptions are still valid.
- openapi_url
- URL of the OpenAPI spec (required)
- waivers_url
- URL of the waivers file (required)
- ruleset_url
- Optional ruleset URL
reusability_review
PRO — Score reusability across a set of APIs and find duplication worth consolidating.
- openapi_urls
- Comma-separated OpenAPI URLs to analyze (required)
map_experience
PRO — Map an API's full experience: REST operation to MCP tool to Agent Skill, with coverage.
- apis_json_url
- URL of the APIs.json (or OpenAPI) to map (required)
governance_html_report
Turn Spectral lint findings into a shareable, self-contained HTML report.
- openapi_url
- URL of the OpenAPI spec (required)
- ruleset_url
- Optional ruleset URL
company_demand_profile
Profile a company's API/technology readiness from the demand-side data (free preview, full is Pro).
- company
- Company name or slug, e.g. "JP Morgan Chase" (required)
where_to_sell
PRO — Find a company's weakest technology dimensions — the openings to sell into.
- company
- Company name or slug (required)
find_the_paper
Find the API Evangelist paper that answers a question, with its outline and where to buy.
- question
- What you want the paper to help with (required)
learn_a_topic
Learn an API topic from the ground up using the research corpus.
- topic
- The topic to learn (required)
weekly_digest
A digest of the latest API Evangelist thinking across one or more areas.
- areas
- Optional comma-separated areas/topics to focus on (blank = across the network)
explore_topic_area
Explore one of the 77 API Evangelist topic areas and everything connected to it.
- slug
- Area slug, e.g. gateways (required)
validate_onboarding_descriptor
Validate an API Onboarding Descriptor (AID) and report what to fix.
- aid_url
- URL of the API Onboarding Descriptor (required)
author_a_rule
Write one governance rule the way that works: get the JSONPath right, validate it, test it against a passing and a failing fixture.
- requirement
- What the rule should enforce, in a sentence (required)
- document
- An example API description to aim it at
fix_these_diagnostics
PRO — Fix an API description's governance findings as a reviewable Overlay, and prove the fix.
- document
- The OpenAPI document to fix (required)
- rules
- Comma-separated rule ids to focus on (optional)
write_ruleset_from_style_guide
PRO — Turn a team's prose API style guide into an owned ruleset, tested, and optionally set as the org default.
- guide
- The style guide text (required)
- owner
- Who owns these rules (team or person)
Resources
5 advertised
Governance ruleset profiles
The curated rulesets validate_api runs by name (`profile`) — OWASP, Problem Details, FHIR, API Authorization — plus the Ruleset Commons registry.
openlint://profilesAPI Evangelist overview
Service root — what the network offers, counts, entry points, and how to engage.
ae://overviewAPI Evangelist services
The services Kin Lane offers teams — API strategy, governance, discovery, evangelism.
ae://servicesContact API Evangelist
Every way to reach API Evangelist — email, form, newsletter, social, mail.
ae://contactCatalog intelligence (PRO)
PRO — per-type counts, stories-per-year, and the top tags by reach across the network.
ae://statsTopic area
One of the 77 topic areas with its related-area graph resolved. Substitute {slug}, e.g. ae://area/gateways.
ae://area/{slug}Tag profile
One tag with its per-type counts and everything it labels across the network. Substitute {slug}, e.g. ae://tag/agents.
ae://tag/{slug}Story
One API Evangelist story by slug (YYYY-MM-DD-slug). Substitute {slug}.
ae://post/{slug}Topic guide (PRO)
PRO — a curated cross-network guide bundle for a topic. Substitute {topic}, e.g. ae://guide/governance.
ae://guide/{topic}Governance rules for a format
The curated rule catalog for one format — openapi, asyncapi, arazzo, jsonschema, apis-json, agent-skill, mcp… — e.g. openlint://rules/openapi. describe_rule gives one rule with its remediation.
openlint://rules/{format}90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1058 ms
- 95th percentile latency
- 1058 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1058 ms · metadata changed · 83 tool(s), 5 resource(s), 5 resource template(s), 32 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http api-evangelist-mcp https://mcp.apievangelist.com/mcpCodex
codex mcp add api-evangelist-mcp --url https://mcp.apievangelist.com/mcpCursor
{
"mcpServers": {
"api-evangelist-mcp": {
"url": "https://mcp.apievangelist.com/mcp"
}
}
}Cline
{
"mcpServers": {
"api-evangelist-mcp": {
"type": "streamableHttp",
"url": "https://mcp.apievangelist.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"api-evangelist-mcp": {
"type": "http",
"url": "https://mcp.apievangelist.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http api-evangelist-mcp https://mcp.apievangelist.com/mcpClaude Desktop
https://mcp.apievangelist.com/mcpWindsurf
{
"mcpServers": {
"api-evangelist-mcp": {
"serverUrl": "https://mcp.apievangelist.com/mcp"
}
}
}Let your agent find its tools
Find servers like API Evangelist MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other documentation and reference servers
Do you run API Evangelist MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.