apiwatch MCP
An MCP server that allows AI agents to check if a model ID or API has upcoming retirement or breaking changes. It provides details on what happens, the effective date, and recommended replacements based on a reviewed feed of vendor changes. It supports batch lookups, text search, and CI integration to fail builds on breaking changes.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://apiwatch.reignventures.co/mcpWhat you can do with it
- Check if an AI model ID has upcoming breaking changes
- Look up retirement dates for APIs and endpoints
- Search for vendor change summaries by text
- Integrate change checks into GitHub Actions CI pipelines
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- apiwatch 1.1.0
- MCP protocol
- 2025-06-18
- Tools
- 7 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
check_model — Check an AI model id
Look up one AI model id (for example gpt-4o-2024-05-13 or claude-sonnet-4-5) in apiwatch's reviewed feed of vendor changes before you use it in code. Returns a one line answer (when it stops working, changes behavior, or its deprecation key date) and each matching record with the date, what to do and the replacement, and links to the record and the vendor's source. "No record" means apiwatch has no record for it, not that it is safe. Records that apply only in some repos or files say so in scope.
{
"type": "object",
"required": [
"model"
],
"properties": {
"model": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The model id as it appears in code"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"model",
"answer",
"found",
"truncated",
"matches",
"record_urls",
"next_step"
],
"properties": {
"found": {
"type": "boolean"
},
"model": {
"type": "string"
},
"answer": {
"type": "string"
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"vendor",
"severity",
"kind",
"surface",
"effective",
"date_passed",
"summary",
"fix_hint",
"scope",
"record_url",
"source_url",
"matched_signature"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"type": "string"
},
"scope": {
"type": "string",
"description": "Empty when the record applies to every caller; otherwise where it applies"
},
"vendor": {
"type": "string"
},
"summary": {
"type": "string"
},
"surface": {
"type": "string"
},
"fix_hint": {
"type": "string"
},
"severity": {
"enum": [
"breaking",
"silent",
"deprecation",
"additive",
"info"
],
"type": "string"
},
"effective": {
"type": "string",
"description": "Key date, YYYY-MM-DD"
},
"record_url": {
"type": "string"
},
"source_url": {
"type": "string"
},
"date_passed": {
"type": "boolean",
"description": "True when the key date is today or earlier (UTC)"
},
"matched_signature": {
"type": "string"
}
}
}
},
"next_step": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"record_urls": {
"type": "array",
"items": {
"type": "string"
}
}
}
}{
"title": "Check an AI model id",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_identifiers — Check many identifiers
Look up many identifiers at once before shipping code: model ids, API endpoints (/v1/assistants), MCP tool names, SDK methods or field names. For each one, a one line answer and the ids of matching records, plus the records themselves. A record scoped to some code (for example only repos that depend on a given SDK major version) is returned with that scope spelled out, never as an unconditional hit. Max 100 identifiers.
{
"type": "object",
"required": [
"identifiers"
],
"properties": {
"identifiers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "Identifiers as they appear in code"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"results",
"records",
"truncated",
"record_urls",
"next_step"
],
"properties": {
"records": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"vendor",
"severity",
"kind",
"surface",
"effective",
"date_passed",
"summary",
"fix_hint",
"scope",
"record_url",
"source_url"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"type": "string"
},
"scope": {
"type": "string",
"description": "Empty when the record applies to every caller; otherwise where it applies"
},
"vendor": {
"type": "string"
},
"summary": {
"type": "string"
},
"surface": {
"type": "string"
},
"fix_hint": {
"type": "string"
},
"severity": {
"enum": [
"breaking",
"silent",
"deprecation",
"additive",
"info"
],
"type": "string"
},
"effective": {
"type": "string",
"description": "Key date, YYYY-MM-DD"
},
"record_url": {
"type": "string"
},
"source_url": {
"type": "string"
},
"date_passed": {
"type": "boolean",
"description": "True when the key date is today or earlier (UTC)"
}
}
}
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"identifier",
"answer",
"found",
"record_ids"
],
"properties": {
"found": {
"type": "boolean"
},
"answer": {
"type": "string"
},
"identifier": {
"type": "string"
},
"record_ids": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"next_step": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"record_urls": {
"type": "array",
"items": {
"type": "string"
}
}
}
}{
"title": "Check many identifiers",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_upcoming — List upcoming changes
List the dated changes in apiwatch's feed from today forward, soonest first: model retirements, breaking API changes, silent behavior changes and deprecation key dates. Use it to plan migrations. Optionally limit to the next N days (default 90, max 365) or one vendor. Max 50 records.
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"maximum": 365,
"minimum": 1,
"description": "How many days ahead, default 90"
},
"vendor": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only this vendor, for example OpenAI, Anthropic, Google, Stripe"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"from",
"to",
"vendor",
"total",
"truncated",
"records",
"record_urls",
"next_step"
],
"properties": {
"to": {
"type": "string"
},
"from": {
"type": "string"
},
"total": {
"type": "integer"
},
"vendor": {
"type": "string"
},
"records": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"vendor",
"severity",
"kind",
"surface",
"effective",
"date_passed",
"summary",
"fix_hint",
"scope",
"record_url",
"source_url"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"type": "string"
},
"scope": {
"type": "string",
"description": "Empty when the record applies to every caller; otherwise where it applies"
},
"vendor": {
"type": "string"
},
"summary": {
"type": "string"
},
"surface": {
"type": "string"
},
"fix_hint": {
"type": "string"
},
"severity": {
"enum": [
"breaking",
"silent",
"deprecation",
"additive",
"info"
],
"type": "string"
},
"effective": {
"type": "string",
"description": "Key date, YYYY-MM-DD"
},
"record_url": {
"type": "string"
},
"source_url": {
"type": "string"
},
"date_passed": {
"type": "boolean",
"description": "True when the key date is today or earlier (UTC)"
}
}
}
},
"next_step": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"record_urls": {
"type": "array",
"items": {
"type": "string"
}
}
}
}{
"title": "List upcoming changes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_changes — Search changes
Search apiwatch's feed of reviewed vendor changes by text: a case-insensitive match on each record's summary, vendor and signatures (the strings to look for in code). Use it when you know a product or feature name but not the exact id. Newest key date first; default 20 results, max 50.
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 20"
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"vendor": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only this vendor, for example OpenAI, Anthropic, Google, Stripe"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"query",
"vendor",
"total",
"truncated",
"records",
"record_urls",
"next_step"
],
"properties": {
"query": {
"type": "string"
},
"total": {
"type": "integer"
},
"vendor": {
"type": "string"
},
"records": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"vendor",
"severity",
"kind",
"surface",
"effective",
"date_passed",
"summary",
"fix_hint",
"scope",
"record_url",
"source_url"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"type": "string"
},
"scope": {
"type": "string",
"description": "Empty when the record applies to every caller; otherwise where it applies"
},
"vendor": {
"type": "string"
},
"summary": {
"type": "string"
},
"surface": {
"type": "string"
},
"fix_hint": {
"type": "string"
},
"severity": {
"enum": [
"breaking",
"silent",
"deprecation",
"additive",
"info"
],
"type": "string"
},
"effective": {
"type": "string",
"description": "Key date, YYYY-MM-DD"
},
"record_url": {
"type": "string"
},
"source_url": {
"type": "string"
},
"date_passed": {
"type": "boolean",
"description": "True when the key date is today or earlier (UTC)"
}
}
}
},
"next_step": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"record_urls": {
"type": "array",
"items": {
"type": "string"
}
}
}
}{
"title": "Search changes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_record — Get one record
Get one apiwatch record in full, as published: what changes, what to do, the strings to search for, ids it does not cover, where it applies, the vendor source and when it was reviewed. Use an id from another tool's result.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Record id, for example openai-2026-10-23-gpt-4o-2024-05-13"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"found",
"record_urls",
"next_step"
],
"properties": {
"found": {
"type": "boolean"
},
"record": {
"type": "object",
"required": [
"id",
"vendor",
"severity",
"kind",
"surface",
"effective",
"date_passed",
"summary",
"fix_hint",
"scope",
"record_url",
"source_url",
"detail",
"signatures",
"exclude",
"context",
"files",
"repo_context",
"verified_on",
"review"
],
"properties": {
"id": {
"type": "string"
},
"kind": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "string"
}
},
"scope": {
"type": "string",
"description": "Empty when the record applies to every caller; otherwise where it applies"
},
"detail": {
"type": "string"
},
"review": {
"type": "string"
},
"vendor": {
"type": "string"
},
"context": {
"type": "array"
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ids the signatures would also match that this change does not cover"
},
"summary": {
"type": "string"
},
"surface": {
"type": "string"
},
"fix_hint": {
"type": "string"
},
"severity": {
"enum": [
"breaking",
"silent",
"deprecation",
"additive",
"info"
],
"type": "string"
},
"effective": {
"type": "string",
"description": "Key date, YYYY-MM-DD"
},
"record_url": {
"type": "string"
},
"signatures": {
"type": "array",
"items": {
"type": "string"
}
},
"source_url": {
"type": "string"
},
"date_passed": {
"type": "boolean",
"description": "True when the key date is today or earlier (UTC)"
},
"verified_on": {
"type": "string"
},
"repo_context": {
"type": "array"
}
}
},
"next_step": {
"type": "string"
},
"record_urls": {
"type": "array",
"items": {
"type": "string"
}
}
}
}{
"title": "Get one record",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_watched_mcp_servers — List watched MCP servers
List the public MCP servers whose tools apiwatch checks every 6 hours (tools/list only, no login, no tool calls), with each one's status (answering, needs a login, not reachable), tool count, last check and last observed change. Use it to see which servers mcp_server_changes can answer about. Returns no tool descriptions.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"required": [
"servers",
"total",
"note",
"index_url"
],
"properties": {
"note": {
"type": "string"
},
"total": {
"type": "integer"
},
"servers": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"url",
"registry_name",
"status",
"status_since",
"tool_count",
"last_checked",
"first_seen",
"last_change",
"changes_total",
"open_flags",
"page_url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"status": {
"enum": [
"pending_first_check",
"ok",
"needs_login",
"not_reachable",
"empty_tools",
"failing"
],
"type": "string"
},
"page_url": {
"type": "string"
},
"first_seen": {
"type": "string"
},
"open_flags": {
"type": "array",
"items": {
"enum": [
"description_changed",
"annotation_widened",
"hidden_characters",
"instruction_like_text",
"unusual_tool_name"
],
"type": "string"
},
"description": "Flags from the last 30 days"
},
"tool_count": {
"type": [
"integer",
"null"
],
"description": "Tools at the last good check; null before the first one"
},
"last_change": {
"type": "string"
},
"last_checked": {
"type": "string"
},
"status_since": {
"type": "string"
},
"changes_total": {
"type": "integer"
},
"registry_name": {
"type": "string"
}
}
}
},
"index_url": {
"type": "string"
}
}
}{
"title": "List watched MCP servers",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}mcp_server_changes — Recent tool changes on an MCP server
Before you rely on a public MCP server's tools, ask whether apiwatch saw them change: tools removed or renamed, new required parameters, rewritten descriptions, changed safety hints. Give a watched server's slug, URL or registry name. Returns a one line answer and the confirmed changes in the last N days (default 90, max 365), newest first, with flags worth a look. Observations only: no changes is not a statement that a server is safe. Never includes tool description text.
{
"type": "object",
"required": [
"server"
],
"properties": {
"days": {
"type": "integer",
"maximum": 365,
"minimum": 1,
"description": "How many days back, default 90"
},
"server": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Slug (context7), URL (https://mcp.context7.com/mcp) or registry name"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"query",
"watched",
"days",
"from",
"to",
"answer",
"server",
"changes",
"notes",
"truncated",
"index_url"
],
"properties": {
"to": {
"type": "string"
},
"days": {
"type": "integer"
},
"from": {
"type": "string"
},
"notes": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"kind"
],
"properties": {
"date": {
"type": "string"
},
"kind": {
"type": "string"
}
}
}
},
"query": {
"type": "string"
},
"answer": {
"type": "string"
},
"server": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"status": {
"enum": [
"pending_first_check",
"ok",
"needs_login",
"not_reachable",
"empty_tools",
"failing"
],
"type": "string"
},
"page_url": {
"type": "string"
},
"first_seen": {
"type": "string"
},
"open_flags": {
"type": "array",
"items": {
"enum": [
"description_changed",
"annotation_widened",
"hidden_characters",
"instruction_like_text",
"unusual_tool_name"
],
"type": "string"
},
"description": "Flags from the last 30 days"
},
"tool_count": {
"type": [
"integer",
"null"
],
"description": "Tools at the last good check; null before the first one"
},
"last_change": {
"type": "string"
},
"last_checked": {
"type": "string"
},
"status_since": {
"type": "string"
},
"changes_total": {
"type": "integer"
},
"registry_name": {
"type": "string"
}
}
},
"changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"events",
"flags",
"truncated"
],
"properties": {
"date": {
"type": "string"
},
"flags": {
"type": "array",
"items": {
"type": "object",
"required": [
"flag",
"tool",
"detail"
],
"properties": {
"flag": {
"enum": [
"description_changed",
"annotation_widened",
"hidden_characters",
"instruction_like_text",
"unusual_tool_name"
],
"type": "string"
},
"tool": {
"type": "string"
},
"detail": {
"type": "string"
}
}
}
},
"events": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"tool",
"path",
"severity"
],
"properties": {
"path": {
"type": "string"
},
"tool": {
"type": "string",
"description": "Tool name, or sha256:<hex> when the name is not plain"
},
"type": {
"type": "string"
},
"severity": {
"enum": [
"breaking",
"silent",
"deprecation",
"additive",
"info"
],
"type": "string"
}
}
}
},
"truncated": {
"type": "boolean"
}
}
}
},
"watched": {
"type": "boolean"
},
"index_url": {
"type": "string"
},
"truncated": {
"type": "boolean"
}
}
}{
"title": "Recent tool changes on an MCP server",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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
- 393 ms
- 95th percentile latency
- 393 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 393 ms · metadata changed · 7 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http apiwatch-mcp https://apiwatch.reignventures.co/mcpCodex
codex mcp add apiwatch-mcp --url https://apiwatch.reignventures.co/mcpCursor
{
"mcpServers": {
"apiwatch-mcp": {
"url": "https://apiwatch.reignventures.co/mcp"
}
}
}Cline
{
"mcpServers": {
"apiwatch-mcp": {
"type": "streamableHttp",
"url": "https://apiwatch.reignventures.co/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"apiwatch-mcp": {
"type": "http",
"url": "https://apiwatch.reignventures.co/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http apiwatch-mcp https://apiwatch.reignventures.co/mcpClaude Desktop
{
"mcpServers": {
"apiwatch-mcp": {
"url": "https://apiwatch.reignventures.co/mcp"
}
}
}Windsurf
{
"mcpServers": {
"apiwatch-mcp": {
"serverUrl": "https://apiwatch.reignventures.co/mcp"
}
}
}Let your agent find its tools
Find servers like apiwatch MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.