Koskamo

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.

API Evangelist MCP logo, by API EvangelistVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by API Evangelist
MCP endpoint (Streamable HTTP)
https://mcp.apievangelist.com/mcp
Vendor documentation

What its tools do

83 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

83 of 83 have a description · 83 of 83 declare behavior hints · 83 of 83 with parameters document them all

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

Vendor evidenceRegistry 1.0.0
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
Server-advertised capabilities
{
  "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.

Sixteen years of API research plus a governance compute layer, as tools, prompts, and resources. LIGHTER ENDPOINTS: this endpoint lists all 82 tools. If you only need one kind of work, connect to a task-scoped toolset instead — same tools, same auth, a fraction of the context: https://mcp.apievangelist.com/mcp/research (31 tools: sixteen years of API research — posts, papers, videos, conversations, areas, tags, building blocks, tools, services, solutions, timeline, feeds); https://mcp.apievangelist.com/mcp/governance (43 tools: the governance compute layer — validate, coverage, scorecard, waivers, diff, PII classification, overlays, certify, forge MCP tools, agent descriptors, pipeline audit, estate rollups — plus rule authoring (validate, test and explain rulesets, JSONPath, agent-skill linting) and estate adoption (baselines, federation, code-first, fixes, style guide to ruleset, org default ruleset)); https://mcp.apievangelist.com/mcp/insights (20 tools: company insights, dimensions, peers, gaps, whitespace and signals; entity demand; measured standards adoption and coalitions). Call get_overview first, or pick a guided prompt: where_can_ae_help / catch_up / learn_a_topic / find_the_paper to research; governance_baseline / classify_exposure / version_change_review to check an API free; author_a_rule to write governance rules that work; fix_these_diagnostics / write_ruleset_from_style_guide to fix findings and turn a style guide into rules; make_my_api_agent_ready / forge_mcp_server to make one agent-ready; govern_my_estate / make_internal_apis_agent_safe / pipeline_audit / certify_and_prove to govern at scale. Reading and checking are free; generating artifacts, certifying, auditing, and estate rollups are Pro — prompts list everything and upsell on use. See https://developer.apievangelist.com/plans/.

Tools

83 advertised

get_overview
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_overview input schema
{
  "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."
    }
  }
}
get_overview annotations
{
  "title": "Overview of API Evangelist",
  "readOnlyHint": true,
  "openWorldHint": false
}
guide_topic
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

guide_topic input schema
{
  "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."
    }
  }
}
guide_topic annotations
{
  "title": "Topic guide",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_services
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.)

find_services input schema
{
  "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."
    }
  }
}
find_services annotations
{
  "title": "Find services",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_service
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full detail for one service offering by slug; include=["content"] inlines the full pitch.

get_service input schema
{
  "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."
    }
  }
}
get_service annotations
{
  "title": "Get service",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_solutions
Advertised by the server during the last successful anonymous check.
Advertised read-only

The solutions registry — 740+ third-party API services and tools (gateways, portals, testing, monitoring, …) ranked by adoption across the companies API Evangelist tracks.

find_solutions input schema
{
  "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."
    }
  }
}
find_solutions annotations
{
  "title": "Find solutions",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_solution
Advertised by the server during the last successful anonymous check.
Advertised read-only

One solution from the vendor registry by slug, with its website and adoption count.

get_solution input schema
{
  "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."
    }
  }
}
get_solution annotations
{
  "title": "Get solution",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_tools
Advertised by the server during the last successful anonymous check.
Advertised read-only

The open-source tooling registry — 400+ tools in use across the companies API Evangelist tracks, each with adoption counts and technology-radar placement.

find_tools input schema
{
  "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."
    }
  }
}
find_tools annotations
{
  "title": "Find tools",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_tool
Advertised by the server during the last successful anonymous check.
Advertised read-only

One tool from the tooling registry by slug, with its website, adoption count, and radar ring.

get_tool input schema
{
  "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."
    }
  }
}
get_tool annotations
{
  "title": "Get tool",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_contact
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every way to reach API Evangelist — email, contact form, newsletter, GitHub, social channels, and postal mail.

get_contact input schema
{
  "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."
    }
  }
}
get_contact annotations
{
  "title": "Contact Kin Lane",
  "readOnlyHint": true,
  "openWorldHint": false
}
search_api_evangelist
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

search_api_evangelist input schema
{
  "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."
    }
  }
}
search_api_evangelist annotations
{
  "title": "Search API Evangelist",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_posts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search or browse 5,100+ API Evangelist stories (2010–present); filter by year or tags.

find_posts input schema
{
  "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."
    }
  }
}
find_posts annotations
{
  "title": "Find posts",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_post
Advertised by the server during the last successful anonymous check.
Advertised read-only

One story by slug (YYYY-MM-DD-slug); include=["content"] returns the full markdown body.

get_post input schema
{
  "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."
    }
  }
}
get_post annotations
{
  "title": "Get post",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_areas
Advertised by the server during the last successful anonymous check.
Advertised read-only

The 77 focused topic areas of the network (agents, gateways, security, …), each a subsite with its own catalog.

find_areas input schema
{
  "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."
    }
  }
}
find_areas annotations
{
  "title": "Find areas",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_area
Advertised by the server during the last successful anonymous check.
Advertised read-only

One topic area with its related-area graph resolved — walk the network from here.

get_area input schema
{
  "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."
    }
  }
}
get_area annotations
{
  "title": "Get area",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_building_blocks
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

find_building_blocks input schema
{
  "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."
    }
  }
}
find_building_blocks annotations
{
  "title": "Find building blocks",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_building_block
Advertised by the server during the last successful anonymous check.
Advertised read-only

One building block by type + slug; include=["content"] returns the full body.

get_building_block input schema
{
  "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."
    }
  }
}
get_building_block annotations
{
  "title": "Get building block",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_conversations
Advertised by the server during the last successful anonymous check.
Advertised read-only

API Evangelist Conversations — recorded discussions with API practitioners (guest, company, YouTube/SoundCloud links).

find_conversations input schema
{
  "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."
    }
  }
}
find_conversations annotations
{
  "title": "Find conversations",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_conversation
Advertised by the server during the last successful anonymous check.
Advertised read-only

One conversation with guest detail and media links; include=["content"] returns the writeup.

get_conversation input schema
{
  "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."
    }
  }
}
get_conversation annotations
{
  "title": "Get conversation",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_papers
Advertised by the server during the last successful anonymous check.
Advertised read-only

API Evangelist papers — single-PDF deep dives on one practice or topic, with outlines.

find_papers input schema
{
  "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."
    }
  }
}
find_papers annotations
{
  "title": "Find papers",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_paper
Advertised by the server during the last successful anonymous check.
Advertised read-only

One paper with its full outline and purchase/landing URL.

get_paper input schema
{
  "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."
    }
  }
}
get_paper annotations
{
  "title": "Get paper",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_videos
Advertised by the server during the last successful anonymous check.
Advertised read-only

The API Evangelist video library — interviews and discussions from across the API space, searchable by transcript.

find_videos input schema
{
  "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."
    }
  }
}
find_videos annotations
{
  "title": "Find videos",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_video
Advertised by the server during the last successful anonymous check.
Advertised read-only

One video by slug with its YouTube id; include=["content"] returns the full transcript.

get_video input schema
{
  "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."
    }
  }
}
get_video annotations
{
  "title": "Get video",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_timeline
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

get_timeline input schema
{
  "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."
    }
  }
}
get_timeline annotations
{
  "title": "Get timeline",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_guidance_section
Advertised by the server during the last successful anonymous check.
Advertised read-only

One editorial guidance section as a list: history, technology, business, politics, governance, or evangelism — the six lenses API Evangelist organizes guidance through.

get_guidance_section input schema
{
  "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."
    }
  }
}
get_guidance_section annotations
{
  "title": "Get guidance section",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_vocabulary
Advertised by the server during the last successful anonymous check.
Advertised read-only

The API vocabulary — thousands of resources, actions, personas, domains, schemas, and tags extracted from the API landscape. Filter by category.

find_vocabulary input schema
{
  "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."
    }
  }
}
find_vocabulary annotations
{
  "title": "Find vocabulary",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_feeds
Advertised by the server during the last successful anonymous check.
Advertised read-only

The static machine-readable feeds every network site publishes (JSON, APIs.json, zero-auth) — the no-key alternative to this API.

get_feeds input schema
{
  "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."
    }
  }
}
get_feeds annotations
{
  "title": "Feeds",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_tags
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_tags input schema
{
  "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."
    }
  }
}
find_tags annotations
{
  "title": "Find tags",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_tag
Advertised by the server during the last successful anonymous check.
Advertised read-only

One tag with its per-type counts and everything it labels across the whole network (stories, areas, guidance, papers, …). Filter with types.

get_tag input schema
{
  "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."
    }
  }
}
get_tag annotations
{
  "title": "Get tag",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_related
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_related input schema
{
  "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."
    }
  }
}
find_related annotations
{
  "title": "Find related",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

PRO — catalog intelligence: per-type counts, stories-per-year, and the top tags by reach across the network.

get_stats input schema
{
  "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."
    }
  }
}
get_stats annotations
{
  "title": "Catalog stats",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_company_insights
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse profiled companies (Fortune 1000 + API providers) by name; ranked by technology-readiness signal. Free.

find_company_insights input schema
{
  "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."
    }
  }
}
find_company_insights annotations
{
  "title": "Find company insights",
  "readOnlyHint": true,
  "openWorldHint": false
}
insights_dimensions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Cross-section ranking of the 40 tracked investment dimensions (AI, cloud, governance, …) by company signal. Free.

insights_dimensions input schema
{
  "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."
    }
  }
}
insights_dimensions annotations
{
  "title": "Insights dimensions",
  "readOnlyHint": true,
  "openWorldHint": false
}
insights_adoption
Advertised by the server during the last successful anonymous check.
Advertised read-only

Services, tools, or standards ranked by how many companies adopt them. Free.

insights_adoption input schema
{
  "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."
    }
  }
}
insights_adoption annotations
{
  "title": "Insights adoption",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_company_insight
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full demand-side profile for one company: 40-dimension readiness, adopted stack, per-quarter history. Pro.

get_company_insight input schema
{
  "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."
    }
  }
}
get_company_insight annotations
{
  "title": "Get company insight",
  "readOnlyHint": true,
  "openWorldHint": false
}
company_gaps
Advertised by the server during the last successful anonymous check.
Advertised read-only

A company's weakest investment dimensions — where it is thin. Pro.

company_gaps input schema
{
  "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."
    }
  }
}
company_gaps annotations
{
  "title": "Company gaps",
  "readOnlyHint": true,
  "openWorldHint": false
}
company_dimensions
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

company_dimensions input schema
{
  "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."
    }
  }
}
company_dimensions annotations
{
  "title": "Company dimensions",
  "readOnlyHint": true,
  "openWorldHint": false
}
company_peers
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

company_peers input schema
{
  "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."
    }
  }
}
company_peers annotations
{
  "title": "Company peers",
  "readOnlyHint": true,
  "openWorldHint": false
}
company_whitespace
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

company_whitespace input schema
{
  "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."
    }
  }
}
company_whitespace annotations
{
  "title": "Company whitespace",
  "readOnlyHint": true,
  "openWorldHint": false
}
company_signals
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

company_signals input schema
{
  "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."
    }
  }
}
company_signals annotations
{
  "title": "Company signals",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_entities
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_entities input schema
{
  "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."
    }
  }
}
find_entities annotations
{
  "title": "Find entities",
  "readOnlyHint": true,
  "openWorldHint": false
}
entity_demand
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

entity_demand input schema
{
  "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."
    }
  }
}
entity_demand annotations
{
  "title": "Entity demand",
  "readOnlyHint": true,
  "openWorldHint": false
}
find_measured_standards
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_measured_standards input schema
{
  "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."
    }
  }
}
find_measured_standards annotations
{
  "title": "Find measured standards",
  "readOnlyHint": true,
  "openWorldHint": false
}
standard_adoption
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

standard_adoption input schema
{
  "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."
    }
  }
}
standard_adoption annotations
{
  "title": "Standard adoption",
  "readOnlyHint": true,
  "openWorldHint": false
}
standard_coalition
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

standard_coalition input schema
{
  "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."
    }
  }
}
standard_coalition annotations
{
  "title": "Standard coalition",
  "readOnlyHint": true,
  "openWorldHint": false
}
standard_repositories
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every repository a standards body publishes, with maturity, stars, forks, open issues and archived status. Free.

standard_repositories input schema
{
  "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."
    }
  }
}
standard_repositories annotations
{
  "title": "Standard repositories",
  "readOnlyHint": true,
  "openWorldHint": false
}
validate_api
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

validate_api input 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
}
validate_api annotations
{
  "title": "Lint an API description",
  "readOnlyHint": true,
  "openWorldHint": false
}
api_coverage
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

api_coverage input 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
}
api_coverage annotations
{
  "title": "Governance coverage",
  "readOnlyHint": true,
  "openWorldHint": false
}
reconcile_waivers
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

reconcile_waivers input schema
{
  "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
}
reconcile_waivers annotations
{
  "title": "Reconcile waivers",
  "readOnlyHint": true,
  "openWorldHint": false
}
governance_report
Advertised by the server during the last successful anonymous check.
Advertised read-only

Turn Spectral findings into a self-contained HTML governance report — severity summary, grouped by rule, framed toward progress.

governance_report input schema
{
  "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
}
governance_report annotations
{
  "title": "Governance HTML report",
  "readOnlyHint": true,
  "openWorldHint": false
}
verify_certificate
Advertised by the server during the last successful anonymous check.
Advertised read-only

Re-verify a governance certificate against the API it attests to. If the API drifted or the certificate was forged, verification fails.

verify_certificate input schema
{
  "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
}
verify_certificate annotations
{
  "title": "Verify a governance certificate",
  "readOnlyHint": true,
  "openWorldHint": false
}
classify_api_fields
Advertised by the server during the last successful anonymous check.
Advertised read-only

Inventory the PII, secret, and sensitive fields an OpenAPI exposes, across parameters and request/response schemas. Run this before exposing an API to agents.

classify_api_fields input 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
}
classify_api_fields annotations
{
  "title": "Classify sensitive API fields",
  "readOnlyHint": true,
  "openWorldHint": false
}
diff_api_versions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compare two OpenAPI versions and classify every change as breaking, non-breaking, or an addition — at path, operation, parameter, request-body, and response granularity.

diff_api_versions input schema
{
  "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
}
diff_api_versions annotations
{
  "title": "Diff two API versions",
  "readOnlyHint": true,
  "openWorldHint": false
}
api_scorecard
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

api_scorecard input 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
}
api_scorecard annotations
{
  "title": "API scorecard",
  "readOnlyHint": true,
  "openWorldHint": false
}
govern_estate
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

govern_estate input schema
{
  "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
}
govern_estate annotations
{
  "title": "Govern an API estate",
  "readOnlyHint": true,
  "openWorldHint": false
}
deprecation_posture
Advertised by the server during the last successful anonymous check.
Advertised read-only

Report every deprecated operation and whether it actually announces a sunset. The ones that go quiet are the ones that break consumers.

deprecation_posture input 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
}
deprecation_posture annotations
{
  "title": "Deprecation posture",
  "readOnlyHint": true,
  "openWorldHint": false
}
validate_onboarding
Advertised by the server during the last successful anonymous check.
Advertised read-only

Validate an API Onboarding Descriptor (AID) against the api-commons schema and report which optional sections it fills in.

validate_onboarding input schema
{
  "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
}
validate_onboarding annotations
{
  "title": "Validate an onboarding descriptor",
  "readOnlyHint": true,
  "openWorldHint": false
}
certify_api
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

certify_api input schema
{
  "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
}
certify_api annotations
{
  "title": "Certify an API",
  "readOnlyHint": true,
  "openWorldHint": false
}
export_agent_rules
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

export_agent_rules input schema
{
  "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
}
export_agent_rules annotations
{
  "title": "Export rules for agents",
  "readOnlyHint": true,
  "openWorldHint": false
}
audit_pipeline
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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`.

audit_pipeline input schema
{
  "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
}
audit_pipeline annotations
{
  "title": "Audit a governance pipeline",
  "readOnlyHint": true,
  "openWorldHint": true
}
forge_mcp_tools
Advertised by the server during the last successful anonymous check.
Advertised read-only

From an OpenAPI, forge an MCP server design, per-operation tools, Agent Skills, an enriched OpenAPI, a server.json, and apis.json properties.

forge_mcp_tools input 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
}
forge_mcp_tools annotations
{
  "title": "Forge MCP tools from OpenAPI",
  "readOnlyHint": true,
  "openWorldHint": false
}
gate_agent_context
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

gate_agent_context input schema
{
  "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
}
gate_agent_context annotations
{
  "title": "Gate agent context",
  "readOnlyHint": true,
  "openWorldHint": false
}
apply_overlay
Advertised by the server during the last successful anonymous check.
Advertised read-only

Apply an OpenAPI Overlay to a document and report what each action matched. Use it for deprecation and migration choreography without forking the contract.

apply_overlay input schema
{
  "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
}
apply_overlay annotations
{
  "title": "Apply an OpenAPI Overlay",
  "readOnlyHint": true,
  "openWorldHint": false
}
mock_payloads
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generate an example request and success-response payload for every operation from its schema.

mock_payloads input 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
}
mock_payloads annotations
{
  "title": "Mock payloads",
  "readOnlyHint": true,
  "openWorldHint": false
}
code_snippets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generate runnable curl, JavaScript, and Python samples for every operation, with path params filled in and a realistic body.

code_snippets input 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
}
code_snippets annotations
{
  "title": "Code snippets",
  "readOnlyHint": true,
  "openWorldHint": false
}
score_reusability
Advertised by the server during the last successful anonymous check.
Advertised read-only

Score how reusable a set of APIs is and detect duplication across them — the anti-sprawl view of an estate.

score_reusability input schema
{
  "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
}
score_reusability annotations
{
  "title": "Score reusability",
  "readOnlyHint": true,
  "openWorldHint": false
}
map_api_experience
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

map_api_experience input schema
{
  "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
}
map_api_experience annotations
{
  "title": "Map the API experience",
  "readOnlyHint": true,
  "openWorldHint": false
}
generate_agent_descriptor
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

generate_agent_descriptor input schema
{
  "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
}
generate_agent_descriptor annotations
{
  "title": "Generate llms.txt + AGENTS.md",
  "readOnlyHint": true,
  "openWorldHint": false
}
validate_ruleset
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

validate_ruleset input schema
{
  "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
}
validate_ruleset annotations
{
  "title": "Validate a ruleset",
  "readOnlyHint": true,
  "openWorldHint": false
}
query_jsonpath
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

query_jsonpath input 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
}
query_jsonpath annotations
{
  "title": "Query a JSONPath",
  "readOnlyHint": true,
  "openWorldHint": false
}
test_ruleset
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

test_ruleset input schema
{
  "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
}
test_ruleset annotations
{
  "title": "Test a ruleset against fixtures",
  "readOnlyHint": true,
  "openWorldHint": false
}
explain_rule_result
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

explain_rule_result input schema
{
  "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
}
explain_rule_result annotations
{
  "title": "Explain a rule result",
  "readOnlyHint": true,
  "openWorldHint": false
}
describe_rule
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

describe_rule input schema
{
  "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
}
describe_rule annotations
{
  "title": "Describe a rule",
  "readOnlyHint": true,
  "openWorldHint": false
}
detect_format
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

detect_format input 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
}
detect_format annotations
{
  "title": "Detect a document format",
  "readOnlyHint": true,
  "openWorldHint": false
}
lint_agent_skill
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lint an agent SKILL.md (markdown with YAML frontmatter) against the API Commons skill rules — name, description, structure, metadata.

lint_agent_skill input 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
}
lint_agent_skill annotations
{
  "title": "Lint an agent skill",
  "readOnlyHint": true,
  "openWorldHint": false
}
document_ruleset
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

document_ruleset input schema
{
  "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
}
document_ruleset annotations
{
  "title": "Document a ruleset",
  "readOnlyHint": true,
  "openWorldHint": false
}
baseline_violations
Advertised by the server during the last successful anonymous check.
Advertised read-only

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).

baseline_violations input 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
}
baseline_violations annotations
{
  "title": "Baseline violations",
  "readOnlyHint": true,
  "openWorldHint": false
}
federate_rulesets
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

federate_rulesets input schema
{
  "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
}
federate_rulesets annotations
{
  "title": "Federate rulesets",
  "readOnlyHint": true,
  "openWorldHint": false
}
fingerprint_generator
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

fingerprint_generator input 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
}
fingerprint_generator annotations
{
  "title": "Fingerprint the OpenAPI generator",
  "readOnlyHint": true,
  "openWorldHint": false
}
fix_diagnostics
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

fix_diagnostics input 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
}
fix_diagnostics annotations
{
  "title": "Fix lint findings",
  "readOnlyHint": true,
  "openWorldHint": false
}
ruleset_from_style_guide
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

ruleset_from_style_guide input schema
{
  "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
}
ruleset_from_style_guide annotations
{
  "title": "Ruleset from a style guide",
  "readOnlyHint": true,
  "openWorldHint": false
}
get_org_ruleset
Advertised by the server during the last successful anonymous check.
Advertised read-only

PRO — Read your org default ruleset: the one every governance call without its own `ruleset` runs against.

get_org_ruleset input schema
{
  "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
}
get_org_ruleset annotations
{
  "title": "Get the org ruleset",
  "readOnlyHint": true,
  "openWorldHint": false
}
set_org_ruleset
Advertised by the server during the last successful anonymous check.

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.

set_org_ruleset input schema
{
  "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
}
set_org_ruleset annotations
{
  "title": "Set the org ruleset",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
submit_api_evangelist_feedback
Advertised by the server during the last successful anonymous check.

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.

submit_api_evangelist_feedback input schema
{
  "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."
    }
  }
}
submit_api_evangelist_feedback annotations
{
  "title": "Send feedback (free)",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

32 advertised

where_can_ae_help

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

PRO — Generate the llms.txt + AGENTS.md consumption contract for an API.

openapi_url
URL of the OpenAPI spec (required)
mock_and_snippets

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

PRO — Score reusability across a set of APIs and find duplication worth consolidating.

openapi_urls
Comma-separated OpenAPI URLs to analyze (required)
map_experience

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

PRO — Find a company's weakest technology dimensions — the openings to sell into.

company
Company name or slug (required)
find_the_paper

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Learn an API topic from the ground up using the research corpus.

topic
The topic to learn (required)
weekly_digest

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

Explore one of the 77 API Evangelist topic areas and everything connected to it.

slug
Area slug, e.g. gateways (required)
validate_onboarding_descriptor

Advertised by the server during the last successful anonymous check.

Validate an API Onboarding Descriptor (AID) and report what to fix.

aid_url
URL of the API Onboarding Descriptor (required)
author_a_rule

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

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

Advertised by the server during the last successful anonymous check.

The curated rulesets validate_api runs by name (`profile`) — OWASP, Problem Details, FHIR, API Authorization — plus the Ruleset Commons registry.

Governance ruleset profiles URI
openlint://profiles

MIME type: application/json

API Evangelist overview

Advertised by the server during the last successful anonymous check.

Service root — what the network offers, counts, entry points, and how to engage.

API Evangelist overview URI
ae://overview

MIME type: application/json

API Evangelist services

Advertised by the server during the last successful anonymous check.

The services Kin Lane offers teams — API strategy, governance, discovery, evangelism.

API Evangelist services URI
ae://services

MIME type: application/json

Contact API Evangelist

Advertised by the server during the last successful anonymous check.

Every way to reach API Evangelist — email, form, newsletter, social, mail.

Contact API Evangelist URI
ae://contact

MIME type: application/json

Catalog intelligence (PRO)

Advertised by the server during the last successful anonymous check.

PRO — per-type counts, stories-per-year, and the top tags by reach across the network.

Catalog intelligence (PRO) URI
ae://stats

MIME type: application/json

Topic area

Advertised by the server during the last successful anonymous check.

One of the 77 topic areas with its related-area graph resolved. Substitute {slug}, e.g. ae://area/gateways.

Topic area URI template
ae://area/{slug}

MIME type: application/json

Tag profile

Advertised by the server during the last successful anonymous check.

One tag with its per-type counts and everything it labels across the network. Substitute {slug}, e.g. ae://tag/agents.

Tag profile URI template
ae://tag/{slug}

MIME type: application/json

Story

Advertised by the server during the last successful anonymous check.

One API Evangelist story by slug (YYYY-MM-DD-slug). Substitute {slug}.

Story URI template
ae://post/{slug}

MIME type: application/json

Topic guide (PRO)

Advertised by the server during the last successful anonymous check.

PRO — a curated cross-network guide bundle for a topic. Substitute {topic}, e.g. ae://guide/governance.

Topic guide (PRO) URI template
ae://guide/{topic}

MIME type: application/json

Governance rules for a format

Advertised by the server during the last successful anonymous check.

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.

Governance rules for a format URI template
openlint://rules/{format}

MIME type: application/json

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.

Too few checks for a percentage yet (1 of 1 answered).

  1. 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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http api-evangelist-mcp https://mcp.apievangelist.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add api-evangelist-mcp --url https://mcp.apievangelist.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable api-evangelist-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "api-evangelist-mcp": {
      "url": "https://mcp.apievangelist.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "api-evangelist-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.apievangelist.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start api-evangelist-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "api-evangelist-mcp": {
      "type": "http",
      "url": "https://mcp.apievangelist.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http api-evangelist-mcp https://mcp.apievangelist.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.apievangelist.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing