ChurnLens Agent API
Agent-facing discovery and query endpoints (MCP, A2A, NLWeb)
Agent-facing discovery and query endpoints (MCP, A2A, NLWeb)
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/churnlens-site:churnlens-site-agent-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: ChurnLens Agent API
description: SaaS revenue quality scoring and due diligence tool.
version: 1.0.0
contact:
url: https://churnlens.site
servers:
- url: https://churnlens.site
tags:
- name: Agent
description: Agent-facing discovery and query endpoints (MCP, A2A, NLWeb)
paths:
/api/mcp:
get:
summary: MCP server manifest
description: 'Discovery document: server info, capabilities, protocol version and the tool list (names and descriptions only).'
operationId: getMcpManifest
tags:
- Agent
responses:
'200':
description: Server manifest
content:
application/json:
schema:
type: object
properties:
jsonrpc:
type: string
serverInfo:
type: object
properties:
name:
type: string
version:
type: string
capabilities:
type: object
protocolVersion:
type: string
tools:
type: array
items:
type: object
properties:
name:
type: string
enum:
- calculate_churn_rate
- get_saas_benchmark
- analyze_revenue_concentration
description:
type: string
_meta:
type: object
description: Install hints, e.g. `npx mcp-remote https://churnlens.site/api/mcp`.
post:
summary: MCP JSON-RPC (Streamable HTTP)
description: Model Context Protocol over JSON-RPC. Supports `initialize`, `tools/list`, `tools/call` and the `notifications/initialized` notification. Batch requests (a JSON array) are accepted. No auth — tools are read-only.
operationId: postMcpRpc
tags:
- Agent
requestBody:
required: true
content:
application/json:
schema:
type: object
description: JSON-RPC 2.0 request, or an array of them for a batch.
properties:
jsonrpc:
type: string
const: '2.0'
id:
description: Omit for notifications; the server then replies 202 with no body.
oneOf:
- type: string
- type: number
method:
type: string
enum:
- initialize
- notifications/initialized
- tools/list
- tools/call
params:
type: object
required:
- method
responses:
'200':
description: JSON-RPC result
content:
application/json:
schema:
type: object
properties:
jsonrpc:
type: string
id: {}
result:
type: object
error:
type: object
'202':
description: Notification accepted (request had no `id`); empty body.
'405':
description: Method not allowed
content:
application/json:
schema:
type: object
properties:
error:
type: string
/api/a2a:
get:
summary: A2A agent card
description: 'Agent-to-agent discovery card: protocol version, transport, capabilities and the skill list.'
operationId: getAgentCard
tags:
- Agent
responses:
'200':
description: Agent card
content:
application/json:
schema:
type: object
properties:
protocolVersion:
type: string
name:
type: string
description:
type: string
url:
type: string
format: uri
preferredTransport:
type: string
capabilities:
type: object
skills:
type: array
items:
type: object
properties:
id:
type: string
enum:
- analyze_churn_risk
- calculate_nrr
name:
type: string
description:
type: string
tags:
type: array
items:
type: string
examples:
type: array
items:
type: string
post:
summary: A2A JSON-RPC
description: '`rpc.discover` and `agent/card` both return the agent card. `faq.search` takes `params.query` and returns case-insensitive substring matches over the FAQ set. Any other method returns the agent summary and skill list.'
operationId: postAgentRpc
tags:
- Agent
requestBody:
required: true
content:
application/json:
schema:
type: object
description: JSON-RPC 2.0 request.
properties:
jsonrpc:
type: string
const: '2.0'
id:
description: Omit for notifications; the server then replies 202 with no body.
oneOf:
- type: string
- type: number
method:
type: string
enum:
- rpc.discover
- agent/card
- faq.search
params:
type: object
required:
- method
responses:
'200':
description: JSON-RPC result
content:
application/json:
schema:
type: object
properties:
jsonrpc:
type: string
id: {}
result:
type: object
'405':
description: Method not allowed
content:
application/json:
schema:
type: object
properties:
error:
type: string
/api/nlweb:
get:
summary: NLWeb knowledge-base query
description: Returns the knowledge base as a schema.org ItemList. With `query`, returns only entries whose question or answer contains it (case-insensitive substring); without it, returns everything.
operationId: getNlwebQuery
tags:
- Agent
parameters:
- name: query
in: query
required: false
schema:
type: string
description: Case-insensitive substring filter. Omit to list all entries.
responses:
'200':
description: schema.org ItemList of matching questions
content:
application/json:
schema:
type: object
properties:
'@context':
type: string
const: https://schema.org
'@type':
type: string
const: ItemList
name:
type: string
const: ChurnLens Knowledge Base
description:
type: string
numberOfItems:
type: integer
itemListElement:
type: array
items:
type: object
properties:
'@type':
type: string
const: Question
name:
type: string
acceptedAnswer:
type: string
url:
type: string
format: uri
post:
summary: NLWeb knowledge-base query (POST)
description: Same as GET, with the term in the JSON body instead of the query string.
operationId: postNlwebQuery
tags:
- Agent
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
query:
type: string
responses:
'200':
description: schema.org ItemList of matching questions
content:
application/json:
schema:
type: object
properties:
'@context':
type: string
const: https://schema.org
'@type':
type: string
const: ItemList
name:
type: string
const: ChurnLens Knowledge Base
description:
type: string
numberOfItems:
type: integer
itemListElement:
type: array
items:
type: object
properties:
'@type':
type: string
const: Question
name:
type: string
acceptedAnswer:
type: string
url:
type: string
format: uri