{
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
  "name": "com.hehrmann/site",
  "title": "hehrmann.com",
  "version": "1.0.0",
  "description": "Read-only MCP server for hehrmann.com, the site of Erik Hehrmann, fractional COO for creative agencies of 10 to 75 people. Tools: list_pages, get_page (any page as Markdown), search_site (full-text search across services, case-study notes, and background), contact_instructions (how to reach Erik on a user's behalf). Resources: every public page as Markdown plus llms.txt and llms-full.txt. No authentication; nothing is written.",
  "websiteUrl": "https://hehrmann.com/",
  "serverUrl": "https://hehrmann.com/mcp",
  "icon": "https://hehrmann.com/assets/hehrmann-favicon-e.png",
  "icons": [
    {
      "src": "https://hehrmann.com/assets/hehrmann-favicon-e.png",
      "mimeType": "image/png",
      "sizes": [
        "512x512"
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/ehehrmann/hehrmann-agent-skills",
    "source": "github"
  },
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://hehrmann.com/mcp",
      "supportedProtocolVersions": [
        "2026-07-28",
        "2025-11-25",
        "2025-06-18",
        "2025-03-26"
      ]
    }
  ],
  "serverInfo": {
    "name": "com.hehrmann/site",
    "title": "hehrmann.com",
    "version": "1.0.0"
  },
  "url": "https://hehrmann.com/mcp",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://hehrmann.com/mcp"
  },
  "capabilities": {
    "tools": true,
    "resources": true,
    "prompts": false
  },
  "authentication": {
    "required": false,
    "documentation": "https://hehrmann.com/auth.md"
  },
  "documentation": "https://hehrmann.com/developers/",
  "agentGuide": "https://hehrmann.com/llms.txt",
  "rateLimit": {
    "policy": "100 requests per 60 seconds per client IP, counted by the edge instance serving the connection",
    "headers": [
      "RateLimit-Policy",
      "RateLimit",
      "Retry-After"
    ]
  },
  "errors": {
    "http": "application/problem+json (RFC 9457), types documented at https://hehrmann.com/developers/#errors",
    "protocol": "JSON-RPC 2.0 error objects"
  },
  "tools": [
    {
      "name": "list_pages",
      "title": "List pages",
      "description": "List every public page on hehrmann.com with its canonical URL, read from the sitemap. Each page has a Markdown twin at <url>index.md, which get_page returns. Pass section to list one area only, for example \"notes\" for the case studies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "section": {
            "type": "string",
            "description": "Limit the list to one section of the site, for example \"notes\" (the case studies). Omit for every page.",
            "minLength": 1,
            "maxLength": 40,
            "pattern": "^[a-z0-9-]+$"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_page",
      "title": "Get a page as Markdown",
      "description": "Return one page of hehrmann.com as Markdown. Pass the URL path with a trailing slash, for example \"/services/\" or \"/notes/timesheets/\". Use list_pages to see the valid paths.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "URL path of the page, e.g. \"/about/\"",
            "minLength": 1,
            "maxLength": 200
          }
        },
        "required": [
          "path"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "search_site",
      "title": "Search the site",
      "description": "Full-text search across every page and case-study note on hehrmann.com. Returns the best-matching sections with the URL to cite. Use it for questions about services and prices, engagement tiers, capacity planning, timesheets, role cards, delegation, hiring, leadership cadence, or Erik's background.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Words to look for",
            "minLength": 2,
            "maxLength": 200
          },
          "limit": {
            "type": "integer",
            "description": "Maximum sections to return (1-8, default 5)",
            "minimum": 1,
            "maximum": 8,
            "default": 5
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "contact_instructions",
      "title": "How to contact Erik",
      "description": "How to reach Erik Hehrmann on a user's behalf: the screened contact form (its fields, what a message needs, who is a fit), the email fallback, and the response time. Pass purpose to get guidance for the two free discovery calls, a specific engagement, or a question. Read-only; this tool sends nothing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "purpose": {
            "type": "string",
            "enum": [
              "discovery-call",
              "engagement",
              "question"
            ],
            "description": "What the user wants: the two free discovery calls, a specific engagement from /services/, or an answer to a question. Omit for the general instructions."
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ]
}
