{
  "name": "benmilne",
  "version": "1.0.0",
  "serverUrl": "https://benmilne.com/mcp",
  "tools": [
    {
      "name": "list_posts",
      "description": "Browse, filter, and paginate all published posts. Returns summaries with title, date, URL, and excerpt. Optionally filter by category or tag slug. Use when a user wants to browse topics, see recent essays, or find posts in a specific category (company-building, payment-systems, stablecoin-infrastructure, financial-regulation) or tag.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "default": 1,
            "description": "Page number for pagination"
          },
          "per_page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 10,
            "description": "Results per page"
          },
          "category": {
            "type": "string",
            "description": "Filter by category slug (e.g. company-building, payment-systems)"
          },
          "tag": {
            "type": "string",
            "description": "Filter by tag slug for cross-cutting themes"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "title": "List Posts",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://benmilne/api-docs"
        }
      }
    },
    {
      "name": "get_post",
      "description": "Retrieve a single post by numeric ID or slug, or pass id=0 for The Value Layer book metadata. Returns title, date, author, content_html, categories, and tags. Use slug from search_posts or list_posts results to chain calls.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Numeric post ID, or 0 for The Value Layer book metadata"
          },
          "slug": {
            "type": "string",
            "description": "Post slug (alternative to id, e.g. 'rate-of-change')"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Get Post",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://benmilne/api-docs"
        }
      }
    },
    {
      "name": "search_posts",
      "description": "Search all published posts by keyword or phrase. Use when a user asks about a specific topic like stablecoin infrastructure, payment regulation, or company building. Returns matching posts ranked by relevance with title, date, URL, and excerpt.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search query string"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Search Posts",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "_meta": {
        "ui": {
          "resourceUri": "ui://benmilne/search"
        }
      }
    }
  ],
  "icon": "https://benmilne.com/assets/media/book/the-value-layer-cover.png",
  "serverInfo": {
    "name": "benmilne",
    "title": "benmilne MCP Server",
    "version": "1.0.0"
  },
  "description": "Read-only MCP-compatible HTTP surface — search posts, retrieve content, taxonomy filters.",
  "url": "https://benmilne.com/mcp",
  "documentation_url": "https://benmilne.com/developers",
  "transport": [
    {
      "type": "streamable-http",
      "endpoint": "https://benmilne.com/mcp"
    },
    {
      "type": "sse",
      "endpoint": "https://benmilne.com/mcp/sse"
    }
  ],
  "authentication": {
    "required": false,
    "type": "bearer",
    "oauth_protected_resource": "https://benmilne.com/.well-known/oauth-protected-resource",
    "oauth_authorization_server": "https://benmilne.com/.well-known/oauth-authorization-server"
  },
  "capabilities": {
    "tools": true,
    "search": true,
    "read": true,
    "write": false
  },
  "registry": {
    "url": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.benmilne-com/benmilne",
    "namespace": "io.github.benmilne-com/benmilne"
  },
  "endpoints": {
    "posts": "https://benmilne.com/mcp/v1/posts",
    "search": "https://benmilne.com/api/search",
    "post": "https://benmilne.com/mcp/v1/post/{id}"
  },
  "servers": [
    {
      "name": "benmilne Content API",
      "type": "product",
      "url": "https://benmilne.com/mcp",
      "description": "Search, read, and browse posts and categories",
      "transport": [
        {
          "type": "streamable-http",
          "endpoint": "https://benmilne.com/mcp"
        },
        {
          "type": "sse",
          "endpoint": "https://benmilne.com/mcp/sse"
        }
      ]
    },
    {
      "name": "benmilne Documentation",
      "type": "docs",
      "url": "https://benmilne.com/mcp/docs",
      "description": "API docs, agent instructions, and OpenAPI spec",
      "transport": [
        {
          "type": "streamable-http",
          "endpoint": "https://benmilne.com/mcp/docs"
        }
      ]
    }
  ]
}