{
    "openapi": "3.1.0",
    "info": {
        "title": "MartechDB API",
        "version": "1.0.0",
        "summary": "Marketing technology vendors that publish an official MCP server.",
        "description": "Read-only and free, with no sign-in. Limits per IP address: 10 requests a minute, 100 an hour and 300 a day. The same data is available from the MCP server at https://martechdb.com/mcp. MartechDB lists only servers the vendor publishes itself, never community servers.",
        "contact": {
            "url": "https://martechdb.com/about"
        }
    },
    "externalDocs": {
        "description": "Instructions for AI agents",
        "url": "https://martechdb.com/llms.txt"
    },
    "servers": [
        {
            "url": "https://martechdb.com/api/v1"
        }
    ],
    "paths": {
        "/vendors": {
            "get": {
                "operationId": "searchVendors",
                "summary": "Search vendors with an official MCP server",
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "Search vendor names, domains and product names.",
                        "schema": {
                            "type": "string",
                            "maxLength": 100
                        }
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "description": "A category slug from /categories, e.g. \"crm\".",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "hosting",
                        "in": "query",
                        "description": "Only vendors with a hosted server, or one you install locally.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "hosted",
                                "local"
                            ]
                        }
                    },
                    {
                        "name": "auth",
                        "in": "query",
                        "description": "Only vendors with a server using this sign-in method. \"oauth_self_serve\" means an AI client can sign in with no set-up.",
                        "schema": {
                            "$ref": "#/components/schemas/AuthMethod"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "name",
                                "servers"
                            ],
                            "default": "name"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 25,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A page of vendors",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data",
                                        "links",
                                        "meta"
                                    ],
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Vendor"
                                            }
                                        },
                                        "links": {
                                            "$ref": "#/components/schemas/PageLinks"
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Rate limit reached",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/vendors/{vendor}": {
            "get": {
                "operationId": "getVendor",
                "summary": "Get one vendor and its official MCP servers",
                "parameters": [
                    {
                        "name": "vendor",
                        "in": "path",
                        "required": true,
                        "description": "The vendor's slug or any of its domains, e.g. \"hubspot.com\".",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The vendor",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data"
                                    ],
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Vendor"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Rate limit reached",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/servers/{server}": {
            "get": {
                "operationId": "getMcpServer",
                "summary": "Get one MCP server, including ones no longer active",
                "parameters": [
                    {
                        "name": "server",
                        "in": "path",
                        "required": true,
                        "description": "The server's slug.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The server",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data"
                                    ],
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/McpServer"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Rate limit reached",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/categories": {
            "get": {
                "operationId": "listCategories",
                "summary": "List categories, each with how many vendors it has",
                "responses": {
                    "200": {
                        "description": "Every category",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data"
                                    ],
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Category"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Rate limit reached",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/changes": {
            "get": {
                "operationId": "listChanges",
                "summary": "Recent changes to the directory, newest first: vendors and servers added or removed, sign-in or hosting changed, and so on",
                "parameters": [
                    {
                        "name": "since",
                        "in": "query",
                        "description": "Only changes after this date or time (ISO 8601).",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 25,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A page of changes",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data"
                                    ],
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Change"
                                            }
                                        },
                                        "links": {
                                            "$ref": "#/components/schemas/PageLinks"
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Invalid \"since\" or \"per_page\""
                    },
                    "429": {
                        "description": "Rate limit reached",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "AuthMethod": {
                "type": "string",
                "enum": [
                    "oauth_self_serve",
                    "oauth",
                    "api_key",
                    "none",
                    "unknown"
                ],
                "description": "\"oauth_self_serve\": the AI client signs in by itself, so anyone can connect in minutes. \"oauth\": you must register an app with the vendor first. \"api_key\": paste a key from your vendor account. \"none\": no sign-in. \"unknown\": not yet checked."
            },
            "Vendor": {
                "type": "object",
                "required": [
                    "name",
                    "slug",
                    "domain",
                    "domains",
                    "categories",
                    "mcp_servers"
                ],
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "domain": {
                        "type": "string",
                        "description": "The main domain."
                    },
                    "domains": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "website_url": {
                        "type": "string",
                        "format": "uri"
                    },
                    "logo_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "categories": {
                        "type": "array",
                        "description": "The main category first.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "type": "string"
                                },
                                "slug": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "mcp_servers": {
                        "type": "array",
                        "description": "Active official servers.",
                        "items": {
                            "$ref": "#/components/schemas/McpServer"
                        }
                    },
                    "alternatives": {
                        "type": "array",
                        "description": "Only on a single vendor: others in its main category.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "name": {
                                    "type": "string"
                                },
                                "slug": {
                                    "type": "string"
                                },
                                "domain": {
                                    "type": "string"
                                },
                                "logo_url": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "McpServer": {
                "type": "object",
                "required": [
                    "slug",
                    "name",
                    "hosting",
                    "auth",
                    "status",
                    "connect"
                ],
                "properties": {
                    "slug": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "remote_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "registry_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Its name in the official MCP Registry."
                    },
                    "packages": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "registry": {
                                    "type": "string",
                                    "description": "npm, pypi, oci, nuget or mcpb."
                                },
                                "name": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "hosting": {
                        "type": "string",
                        "enum": [
                            "remote",
                            "local",
                            "both",
                            "unknown"
                        ]
                    },
                    "auth": {
                        "$ref": "#/components/schemas/AuthMethod"
                    },
                    "in_official_registry": {
                        "type": "boolean"
                    },
                    "repo_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "docs_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "found_by": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "enum": [
                                "live_check",
                                "registry_domain",
                                "registry_name"
                            ]
                        }
                    },
                    "status": {
                        "type": "string",
                        "description": "Whether the server is still live, e.g. \"active\" or \"removed\"."
                    },
                    "last_checked_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "connect": {
                        "$ref": "#/components/schemas/Connect"
                    },
                    "vendor": {
                        "type": "object",
                        "description": "Only on a single server.",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "slug": {
                                "type": "string"
                            },
                            "domain": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "Connect": {
                "type": "object",
                "description": "Ready-to-use set-up for AI clients. A hosted server is preferred over a local package.",
                "properties": {
                    "claude_code": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Claude Code command for the hosted server."
                    },
                    "claude_code_local": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Claude Code command that runs the package locally."
                    },
                    "json": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "An \"mcpServers\" config for Cursor and other clients."
                    },
                    "cursor_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Cursor one-click install link."
                    },
                    "vscode_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "VS Code one-click install link."
                    },
                    "connector_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri",
                        "description": "The address to paste as a custom connector in Claude.ai, Claude Desktop or ChatGPT."
                    }
                }
            },
            "Category": {
                "type": "object",
                "required": [
                    "name",
                    "slug"
                ],
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "vendor_count": {
                        "type": "integer"
                    }
                }
            },
            "PageLinks": {
                "type": "object",
                "properties": {
                    "first": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "last": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "prev": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "next": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    }
                }
            },
            "PageMeta": {
                "type": "object",
                "properties": {
                    "current_page": {
                        "type": "integer"
                    },
                    "last_page": {
                        "type": "integer"
                    },
                    "per_page": {
                        "type": "integer"
                    },
                    "total": {
                        "type": "integer"
                    },
                    "from": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "to": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "path": {
                        "type": "string"
                    }
                }
            },
            "Change": {
                "type": "object",
                "required": [
                    "type",
                    "occurred_at"
                ],
                "properties": {
                    "type": {
                        "type": "string",
                        "description": "For example \"vendor_added\", \"server_removed\" or \"auth_changed\"."
                    },
                    "summary": {
                        "type": "string"
                    },
                    "vendor": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "slug": {
                                "type": "string"
                            },
                            "domain": {
                                "type": "string"
                            },
                            "listed": {
                                "type": "boolean"
                            }
                        }
                    },
                    "server": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "slug": {
                                "type": "string"
                            }
                        }
                    },
                    "before": {
                        "description": "The value before the change, if any."
                    },
                    "after": {
                        "description": "The value after the change, if any."
                    },
                    "occurred_at": {
                        "type": "string",
                        "format": "date-time"
                    }
                }
            },
            "Error": {
                "type": "object",
                "properties": {
                    "message": {
                        "type": "string"
                    }
                }
            }
        }
    }
}