{
  "project": "saascode",
  "version": "1.0.0",
  "description": "Supplementary project descriptor. MCP initialize and tools/list are the protocol source of truth.",
  "endpoint": "/api/catalog/mcp",
  "transport": "streamable-http",
  "authentication": "none",
  "documentation": "/developers.md",
  "tools": [
    {
      "name": "saascode_search_catalog",
      "title": "Search the public SaaSCode catalog",
      "description": "Find and compare publicly visible SaaS products. Returns current Standard prices, lifecycle states and source links with pagination. Does not read private Genesis ideas, accounts or purchases.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "query": {
            "description": "Search product name, tagline and description; omit to browse.",
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "category": {
            "description": "Category slug returned by a product, for example customer-operations.",
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "tags": {
            "description": "Tag slugs to match together (AND).",
            "maxItems": 8,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "sort": {
            "default": "featured",
            "description": "Catalog ordering; featured is the existing storefront order.",
            "type": "string",
            "enum": [
              "featured",
              "newest",
              "alphabetical"
            ]
          },
          "page": {
            "default": 1,
            "description": "One-based page number.",
            "type": "integer",
            "minimum": 1,
            "maximum": 1000
          },
          "page_size": {
            "default": 12,
            "description": "Products per page, at most 20.",
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          }
        },
        "required": [
          "sort",
          "page",
          "page_size"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "tagline": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "status": {
                  "type": "string",
                  "description": "Public lifecycle state; coming_soon and beta do not imply a product is available to buy."
                },
                "category": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "price_usd": {
                  "anyOf": [
                    {
                      "type": "number",
                      "minimum": 0
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Current public Standard price in US dollars, including a current free drop; null means unpriced."
                },
                "plus_only": {
                  "type": "boolean",
                  "description": "Whether purchase requires Plus membership; browsing remains public."
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "markdown_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "slug",
                "name",
                "tagline",
                "status",
                "category",
                "price_usd",
                "plus_only",
                "url",
                "markdown_url"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "page": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "page_size": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "next_page": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "products",
          "total",
          "page",
          "page_size",
          "next_page"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "scope": "read",
      "parameters": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "query": {
            "description": "Search product name, tagline and description; omit to browse.",
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "category": {
            "description": "Category slug returned by a product, for example customer-operations.",
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "pattern": "^[a-z0-9][a-z0-9-]*$"
          },
          "tags": {
            "description": "Tag slugs to match together (AND).",
            "maxItems": 8,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            }
          },
          "sort": {
            "default": "featured",
            "description": "Catalog ordering; featured is the existing storefront order.",
            "type": "string",
            "enum": [
              "featured",
              "newest",
              "alphabetical"
            ]
          },
          "page": {
            "default": 1,
            "description": "One-based page number.",
            "type": "integer",
            "minimum": 1,
            "maximum": 1000
          },
          "page_size": {
            "default": 12,
            "description": "Products per page, at most 20.",
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          }
        },
        "required": [
          "sort",
          "page",
          "page_size"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "saascode_get_catalog_product",
      "title": "Read a public SaaSCode product",
      "description": "Read one visible product's description, audience, features and source links. Price is the public Standard price in USD. Use the website to choose a license and confirm any purchase; this tool cannot buy or grant access.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "pattern": "^[a-z0-9][a-z0-9-]*$",
            "description": "Public product slug returned by saascode_search_catalog."
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "product": {
            "type": "object",
            "properties": {
              "slug": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "tagline": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "status": {
                "type": "string",
                "description": "Public lifecycle state; coming_soon and beta do not imply a product is available to buy."
              },
              "category": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "price_usd": {
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Current public Standard price in US dollars, including a current free drop; null means unpriced."
              },
              "plus_only": {
                "type": "boolean",
                "description": "Whether purchase requires Plus membership; browsing remains public."
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "markdown_url": {
                "type": "string",
                "format": "uri"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "target_user": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "features": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "demo_url": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uri"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "truncated": {
                "type": "boolean",
                "description": "Some long descriptive fields were shortened. Follow markdown_url for the public detail."
              }
            },
            "required": [
              "slug",
              "name",
              "tagline",
              "status",
              "category",
              "price_usd",
              "plus_only",
              "url",
              "markdown_url",
              "description",
              "target_user",
              "features",
              "tags",
              "demo_url",
              "truncated"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "product"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "scope": "read",
      "parameters": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "pattern": "^[a-z0-9][a-z0-9-]*$",
            "description": "Public product slug returned by saascode_search_catalog."
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "saascode_read_public_document",
      "title": "Read SaaSCode public documentation",
      "description": "Read an allowlisted public Markdown document about SaaSCode, catalog access, pricing, authentication, membership, help or terms. Returns bounded text and next_offset for continuation. No arbitrary URL fetching or member content.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "home",
              "developers",
              "pricing",
              "auth",
              "catalog",
              "inside",
              "plus",
              "help",
              "terms",
              "privacy",
              "about",
              "growth"
            ],
            "description": "A fixed public document ID; arbitrary URLs and private pages are not accepted."
          },
          "offset": {
            "default": 0,
            "description": "Character offset, starting at zero. Continue with next_offset.",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          },
          "max_characters": {
            "default": 6000,
            "description": "Maximum Markdown characters in this response.",
            "type": "integer",
            "minimum": 1000,
            "maximum": 12000
          }
        },
        "required": [
          "id",
          "offset",
          "max_characters"
        ],
        "additionalProperties": false
      },
      "outputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "home",
              "developers",
              "pricing",
              "auth",
              "catalog",
              "inside",
              "plus",
              "help",
              "terms",
              "privacy",
              "about",
              "growth"
            ]
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "markdown": {
            "type": "string"
          },
          "offset": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "total_characters": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "next_offset": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "title",
          "url",
          "markdown",
          "offset",
          "total_characters",
          "next_offset"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "scope": "read",
      "parameters": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "home",
              "developers",
              "pricing",
              "auth",
              "catalog",
              "inside",
              "plus",
              "help",
              "terms",
              "privacy",
              "about",
              "growth"
            ],
            "description": "A fixed public document ID; arbitrary URLs and private pages are not accepted."
          },
          "offset": {
            "default": 0,
            "description": "Character offset, starting at zero. Continue with next_offset.",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          },
          "max_characters": {
            "default": 6000,
            "description": "Maximum Markdown characters in this response.",
            "type": "integer",
            "minimum": 1000,
            "maximum": 12000
          }
        },
        "required": [
          "id",
          "offset",
          "max_characters"
        ],
        "additionalProperties": false
      }
    }
  ]
}
