{
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
  "name": "com.pabloalbaladejo/site",
  "title": "Pablo Albaladejo",
  "version": "1.0.0",
  "description": "Read-only tools for the blog posts, CV and talks of Pablo Albaladejo. No login.",
  "websiteUrl": "https://pabloalbaladejo.com",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://agents.pabloalbaladejo.com/mcp",
      "supportedProtocolVersions": [
        "2026-07-28",
        "2025-11-25",
        "2025-06-18",
        "2025-03-26",
        "2024-11-05"
      ]
    }
  ],
  "serverInfo": {
    "name": "com.pabloalbaladejo/site",
    "title": "Pablo Albaladejo",
    "version": "1.0.0"
  },
  "endpoint": "https://agents.pabloalbaladejo.com/mcp",
  "transport": "streamable-http",
  "capabilities": {
    "tools": {}
  },
  "instructions": "This server gives read-only access to the public content of pabloalbaladejo.com. Use list_posts or search_posts to find a blog post, then get_post to read it. Use get_cv for work history and certifications, and list_talks for talk abstracts. The tools do not change anything and need no credentials.",
  "tools": [
    {
      "name": "list_posts",
      "title": "List blog posts",
      "description": "List all blog posts on pabloalbaladejo.com, newest first. Each item has the slug, title, description, date, category and links.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "get_post",
      "title": "Get one blog post",
      "description": "Get one blog post by its slug. The result has the full text as Markdown, plus the FAQ and sources when the post has them.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "The post slug, for example geo-how-ai-agents-find-you. Use list_posts or search_posts to find it.",
            "pattern": "^[a-z0-9-]{1,100}$"
          }
        },
        "required": [
          "slug"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "search_posts",
      "title": "Search blog posts",
      "description": "Search the blog posts by words in the title, description and category. The result has up to 10 posts, best match first. The search uses plain word matching, not an AI model.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "The words to look for. At most 100 bytes of UTF-8 text, with no control characters.",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "get_cv",
      "title": "Get the CV",
      "description": "Get the CV of Pablo Albaladejo: current role, work history, education and certifications.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "list_talks",
      "title": "List talks",
      "description": "Get the speaker bios of Pablo Albaladejo and the abstracts of the talks he offers, with their length.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
  ]
}
