{
  "$schema": "https://modelcontextprotocol.io/schemas/server-card/v1",
  "serverInfo": {
    "name": "vibecoding-events",
    "version": "1.0.0",
    "title": "Vibecoding Events MCP Server",
    "description": "MCP server for vibecoding.cz event calendar. Discover, search, and submit Czech IT and AI community events."
  },
  "publisher": {
    "name": "Vibecoding.cz",
    "url": "https://www.vibecoding.cz",
    "contact": "patrick@vibecoding.cz"
  },
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://mcp.vibecoding.cz/mcp"
  },
  "auth": {
    "type": "none",
    "description": "Public access for read operations and event submissions. Submissions go through admin review before publishing."
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "list_events",
      "description": "List upcoming events from vibecoding.cz calendar. Returns title, date, time, location, URL, and source.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 10,
            "description": "Number of events to return (max 50)"
          },
          "include_past": {
            "type": "boolean",
            "default": false,
            "description": "Include past events"
          }
        }
      }
    },
    {
      "name": "search_events",
      "description": "Search events by keyword in title, description, or location.",
      "inputSchema": {
        "type": "object",
        "required": ["query"],
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200,
            "description": "Search query"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "default": 10,
            "description": "Max results"
          }
        }
      }
    },
    {
      "name": "get_event",
      "description": "Get full detail of a specific event by its slug.",
      "inputSchema": {
        "type": "object",
        "required": ["slug"],
        "properties": {
          "slug": {
            "type": "string",
            "description": "Event slug (e.g. \"pycon-cz-2026-09-15\")"
          }
        }
      }
    },
    {
      "name": "submit_event",
      "description": "Submit a new community event to the vibecoding.cz calendar. The event will be reviewed by an admin before publishing. Use source_name + source_id for deduplication.",
      "inputSchema": {
        "type": "object",
        "required": ["title", "date", "time", "external_url", "organizer_name"],
        "properties": {
          "title": {
            "type": "string",
            "minLength": 3,
            "maxLength": 200,
            "description": "Event title"
          },
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Event date (YYYY-MM-DD), must be in the future"
          },
          "time": {
            "type": "string",
            "pattern": "^\\d{2}:\\d{2}$",
            "description": "Start time (HH:MM)"
          },
          "end_time": {
            "type": "string",
            "pattern": "^\\d{2}:\\d{2}$",
            "description": "End time (HH:MM)"
          },
          "location": {
            "type": "string",
            "maxLength": 200,
            "description": "Venue and city"
          },
          "description": {
            "type": "string",
            "maxLength": 2000,
            "description": "Event description"
          },
          "external_url": {
            "type": "string",
            "format": "uri",
            "description": "Link to event page or tickets"
          },
          "organizer_name": {
            "type": "string",
            "maxLength": 200,
            "description": "Organizer name"
          },
          "source_name": {
            "type": "string",
            "maxLength": 50,
            "description": "Import source for deduplication (e.g. \"meetup\", \"eventbrite\", \"luma\")"
          },
          "source_id": {
            "type": "string",
            "maxLength": 200,
            "description": "External event ID for deduplication"
          }
        }
      }
    }
  ],
  "documentation": "https://www.vibecoding.cz/docs/mcp-server",
  "termsOfService": "https://www.vibecoding.cz/obchodni-podminky"
}
