{
  "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
  "name": "dev.codenation/codenation",
  "version": "1.0.0",
  "serverInfo": {
    "name": "codenation",
    "title": "Codenation",
    "version": "1.0.0"
  },
  "description": "Search the Codenation index of developer and SaaS tools, read checked prices and collections.",
  "instructions": "Codenation (https://www.codenation.dev) is a hand-reviewed index of developer and SaaS tools. Use search_tools to find tools by keyword, category, tag or pricing model, then get_tool for the full record (what it does, who it suits, the price read on the tool's own pricing page and the date it was read). list_collections and get_collection return hand-picked groups of tools that do the same job, with short prices. list_categories returns the 8 categories. submit_tool adds a project to the moderated review queue; nothing is listed before a person reads it, so only call it when the user asks to submit their own project. Always cite the codenation_url of the records you use. Prices change: quote the checked date with any price.",
  "websiteUrl": "https://www.codenation.dev/docs/",
  "documentationUrl": "https://www.codenation.dev/docs/",
  "iconUrl": "https://www.codenation.dev/press/icon-512.png",
  "icons": [
    {
      "src": "https://www.codenation.dev/press/icon-512.png",
      "mimeType": "image/png",
      "sizes": [
        "512x512"
      ]
    }
  ],
  "protocolVersions": [
    "2025-11-25",
    "2025-06-18",
    "2025-03-26",
    "2024-11-05"
  ],
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://www.codenation.dev/api/mcp"
  },
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://www.codenation.dev/api/mcp"
    }
  ],
  "authentication": {
    "required": false,
    "schemes": []
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {},
    "prompts": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "search_tools",
      "title": "Search tools",
      "description": "Search the Codenation index of developer and SaaS tools. Every word of `query` must match the tool's name, tags, tagline, category or description; results are ranked by relevance. Filter by `category`, `tag` or `pricing`. Returns short records (slug, name, tagline, category, pricing, tags, website, codenation_url) and the total number of matches. Call get_tool with a slug for the full record and checked price. With no query, lists tools alphabetically.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 200,
            "description": "Keywords, e.g. \"self-hosted analytics\" or \"auth\". Optional."
          },
          "category": {
            "type": "string",
            "enum": [
              "ai",
              "dev-tools",
              "analytics",
              "fintech",
              "no-code",
              "marketing",
              "productivity",
              "security"
            ],
            "description": "Category slug. Optional."
          },
          "tag": {
            "type": "string",
            "maxLength": 60,
            "description": "Exact tag, e.g. \"open-source\" or \"llm\". Optional."
          },
          "pricing": {
            "type": "string",
            "enum": [
              "Free",
              "Freemium",
              "Paid",
              "Open Source"
            ],
            "description": "Pricing model. Optional."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Results per page."
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0,
            "description": "Results to skip, for paging."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Search tools",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_tool",
      "title": "Get a tool",
      "description": "Get the full Codenation record of one tool by its slug (as returned by search_tools): description, makers, category, tags, pricing model, website, the collections it belongs to, and when available a checked presentation with what it does, who it suits, the price read on the tool's own pricing page, the date it was read and the source URL. Returns an error result if the slug is unknown.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Tool slug, e.g. \"plausible-analytics\"."
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Get a tool",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_collections",
      "title": "List collections",
      "description": "List every Codenation collection: hand-picked groups of tools that do the same job (for example authentication for SaaS, or privacy-friendly analytics). Returns slug, name, title, description, number of tools, tool slugs and codenation_url. Call get_collection for the tools and their prices.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "title": "List collections",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_collection",
      "title": "Get a collection",
      "description": "Get one Codenation collection by slug (as returned by list_collections): its introduction and each tool with a short price and the date that price was checked. Returns an error result if the slug is unknown.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Collection slug, e.g. \"best-auth-tools-for-saas\"."
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Get a collection",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_categories",
      "title": "List categories",
      "description": "List the categories of the Codenation index with their slug, name, description and number of tools. Use a slug as the category filter of search_tools.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "annotations": {
        "title": "List categories",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "submit_tool",
      "title": "Submit a tool for review",
      "description": "Submit a project to the Codenation review queue as a free listing. Nothing is published by this call: a person reviews every submission and may decline it. A free listing links to the project with rel=\"nofollow\". Requires the project's name, its full https:// URL and a contact email for the reviewer; tagline, description and category are optional. Only call this when the user explicitly asks to submit a project they are responsible for. Returns the submission id, or an error result if a field is invalid or the site is already listed. Limited to 5 submissions per hour per client.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Project name."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 300,
            "description": "Full project URL, starting with https://."
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 160,
            "description": "Contact email for the reviewer. Not published."
          },
          "tagline": {
            "type": "string",
            "maxLength": 120,
            "description": "One line about what it does. Optional."
          },
          "description": {
            "type": "string",
            "maxLength": 600,
            "description": "A few sentences about the project. Optional."
          },
          "category": {
            "type": "string",
            "enum": [
              "ai",
              "dev-tools",
              "analytics",
              "fintech",
              "no-code",
              "marketing",
              "productivity",
              "security"
            ],
            "description": "Category slug. Optional, defaults to dev-tools."
          }
        },
        "required": [
          "name",
          "url",
          "email"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Submit a tool for review",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      }
    }
  ],
  "prompts": [
    {
      "name": "find_tools_for_job",
      "title": "Find tools for a job",
      "description": "Find tools in the Codenation index for a job, and compare their checked prices.",
      "arguments": [
        {
          "name": "job",
          "description": "What the tool must do, e.g. \"privacy-friendly web analytics\".",
          "required": true
        },
        {
          "name": "constraints",
          "description": "Budget, hosting or licence constraints. Optional.",
          "required": false
        }
      ]
    },
    {
      "name": "compare_collection",
      "title": "Compare a collection",
      "description": "Summarise one Codenation collection and help choose between its tools.",
      "arguments": [
        {
          "name": "collection",
          "description": "Collection slug, e.g. \"best-google-analytics-alternatives\".",
          "required": true
        }
      ]
    }
  ],
  "resources": [],
  "openapi": "https://www.codenation.dev/api/openapi.json",
  "privacyPolicyUrl": "https://www.codenation.dev/privacy/",
  "termsOfServiceUrl": "https://www.codenation.dev/terms/",
  "support": {
    "email": "contact@codenation.dev",
    "url": "https://www.codenation.dev/support/"
  }
}