Skip to main content
Glama
the-events-calendar

The Events Calendar MCP Server

Official

The Events Calendar MCP Server

An MCP (Model Context Protocol) server that provides unified CRUD operations for The Events Calendar and Event Tickets WordPress plugins.

Features

  • Unified Tools: Single tools for Create/Update, Read, Delete, and Search operations across all post types

  • Supported Post Types:

    • Events (tribe_events)

    • Venues (tribe_venue)

    • Organizers (tribe_organizer)

    • Tickets (tribe_rsvp_tickets or tec_tc_ticket)

  • Full CRUD Operations: Create, Read, Update, Delete with proper error handling

  • Search Functionality: Integrated search via the read tool with query parameter

  • Type Safety: Full TypeScript support with proper type definitions

Related MCP server: WordPress MCP Server

Requirements

  • Node.js >= v20.0.0

  • WordPress site with The Events Calendar plugin

  • WordPress Application Password for authenticationd

Installation

Go to: Settings -> Cursor Settings -> MCP -> Add new global MCP server

Pasting the following configuration into your Cursor ~/.cursor/mcp.json file is the recommended approach. You may also install in a specific project by creating .cursor/mcp.json in your project folder. See Cursor MCP docs for more info.

Since Cursor 1.0, you can click the install button below for instant one-click installation.

Cursor Local Server Connection

Install MCP Server

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {
        "WP_APP_PASSWORD": "your-application-password"
      }
    }
  }
}

Run this command. See Claude Code MCP docs for more info.

Claude Code Local Server Connection

WP_APP_PASSWORD="your-application-password" claude mcp add tec-mcp -- npx -y @the-events-calendar/mcp-server --url https://your-wordpress-site.com --username your-username

Add this to your Windsurf MCP config file. See Windsurf MCP docs for more info.

Windsurf Local Server Connection

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {
        "WP_APP_PASSWORD": "your-application-password"
      }
    }
  }
}

Add this to your VS Code MCP config file. See VS Code MCP docs for more info.

VS Code Local Server Connection

"mcp": {
  "servers": {
    "tec-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {
        "WP_APP_PASSWORD": "your-application-password"
      }
    }
  }
}

It can be installed via Zed Extensions or you can add this to your Zed settings.json. See Zed Context Server docs for more info.

{
  "context_servers": {
    "TEC MCP": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@the-events-calendar/mcp-server",
          "--url",
          "https://your-wordpress-site.com",
          "--username",
          "your-username"
        ]
      },
      "env": {"WP_APP_PASSWORD": "your-application-password"},
      "settings": {}
    }
  }
}

To configure TEC MCP in Augment Code, you can use either the graphical interface or manual configuration.

A. Using the Augment Code UI

  1. Click the hamburger menu.

  2. Select Settings.

  3. Navigate to the Tools section.

  4. Click the + Add MCP button.

  5. Enter the following command:

    WP_APP_PASSWORD="your-application-password" npx -y @the-events-calendar/mcp-server@latest --url https://your-wordpress-site.com --username your-username
  6. Name the MCP: TEC MCP.

  7. Click the Add button.

Once the MCP server is added, you can start using the TEC MCP tools directly within Augment Code.


B. Manual Configuration

  1. Press Cmd/Ctrl Shift P or go to the hamburger menu in the Augment panel

  2. Select Edit Settings

  3. Under Advanced, click Edit in settings.json

  4. Add the server configuration to the mcpServers array in the augment.advanced object

"augment.advanced": {
  "mcpServers": [
    {
      "name": "tec-mcp",
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  ]
}

Once the MCP server is added, restart your editor. If you receive any errors, check the syntax to make sure closing brackets or commas are not missing.

Add this to your Roo Code MCP configuration file. See Roo Code MCP docs for more info.

Roo Code Local Server Connection

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

See Gemini CLI Configuration for details.

  1. Open the Gemini CLI settings file. The location is ~/.gemini/settings.json (where ~ is your home directory).

  2. Add the following to the mcpServers object in your settings.json file:

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

If the mcpServers object does not exist, create it.

Open Claude Desktop and navigate to Settings > Connectors > Add Custom Connector. Enter the name as TEC MCP and configure it to launch via npx.

Local Server Connection

Open Claude Desktop developer settings and edit your claude_desktop_config.json file to add the following configuration. See Claude Desktop MCP docs for more info.

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": ["-y", "@the-events-calendar/mcp-server"]
    }
  }
}

Add this to your Opencode configuration file. See Opencode MCP docs docs for more info.

Opencode Local Server Connection

{
  "mcp": {
    "tec-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"},
      "enabled": true
    }
  }
}

See OpenAI Codex for more information.

Add the following configuration to your OpenAI Codex MCP server settings:

[mcp_servers.tec-mcp]
args = [
"-y",
"@the-events-calendar/mcp-server",
"--url",
"https://your-wordpress-site.com",
"--username",
"your-username"
]
command = "npx"

See JetBrains AI Assistant Documentation for more details.

  1. In JetBrains IDEs go to Settings -> Tools -> AI Assistant -> Model Context Protocol (MCP)

  2. Click + Add.

  3. Click on Command in the top-left corner of the dialog and select the As JSON option from the list

  4. Add this configuration and click OK

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}
  1. Click Apply to save changes.

  2. The same way TEC MCP could be added for JetBrains Junie in Settings -> Tools -> Junie -> MCP Settings

See Kiro Model Context Protocol Documentation for details.

  1. Navigate Kiro > MCP Servers

  2. Add a new MCP server by clicking the + Add button.

  3. Paste the configuration given below:

{
  "mcpServers": {
    "TEC MCP": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"},
      "disabled": false,
      "autoApprove": []
    }
  }
}
  1. Click Save to apply the changes.

Use the Add manually feature and fill in the JSON configuration information for that MCP server. For more details, visit the Trae documentation.

Trae Local Server Connection

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

Use these alternatives to run the local TEC MCP server with other runtimes. These examples work for any client that supports launching a local MCP server via command + args.

Bun

{
  "mcpServers": {
    "tec-mcp": {
      "command": "bunx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

Deno

{
  "mcpServers": {
    "tec-mcp": {
      "command": "deno",
      "args": [
        "run",
        "--allow-env=NO_DEPRECATION,TRACE_DEPRECATION",
        "--allow-net",
        "npm:@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

If you prefer to run the MCP server in a Docker container:

  1. Build the Docker Image:

    First, create a Dockerfile in the project root (or anywhere you prefer):

    FROM node:18-alpine
    
    WORKDIR /app
    
    # Install the latest version globally
    RUN npm install -g @the-events-calendar/mcp-server
    
    # Expose default port if needed (optional, depends on MCP client interaction)
    # EXPOSE 3000
    
    # Default command to run the server
    CMD ["mcp-server"]

    Then, build the image using a tag (e.g., tec-mcp). Make sure Docker Desktop (or the Docker daemon) is running. Run the following command in the same directory where you saved the Dockerfile:

    docker build -t tec-mcp .
  2. Configure Your MCP Client:

    Update your MCP client's configuration to use the Docker command.

    Example for a cline_mcp_settings.json:

    {
      "mcpServers": {
        "TEC MCP": {
          "autoApprove": [],
          "disabled": false,
          "timeout": 60,
          "command": "docker",
          "args": ["run", "-i", "--rm", "tec-mcp"],
          "transportType": "stdio"
        }
      }
    }

    Note: This is an example configuration. Please refer to the specific examples for your MCP client (like Cursor, VS Code, etc.) earlier in this README to adapt the structure (e.g., mcpServers vs servers). Also, ensure the image name in args matches the tag used during the docker build command.

The configuration on Windows is slightly different compared to Linux or macOS (Cline is used in the example). The same principle applies to other editors; refer to the configuration of command and args.

{
  "mcpServers": {
    "github.com/the-events-calendar/mcp-server": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"},
      "disabled": false,
      "autoApprove": []
    }
  }
}

Add this to your Amazon Q Developer CLI configuration file. See Amazon Q Developer CLI docs for more details.

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

See Warp Model Context Protocol Documentation for details.

  1. Navigate Settings > AI > Manage MCP servers.

  2. Add a new MCP server by clicking the + Add button.

  3. Paste the configuration given below:

{
  "TEC MCP": {
    "command": "npx",
    "args": [
      "-y",
      "@the-events-calendar/mcp-server",
      "--url",
      "https://your-wordpress-site.com",
      "--username",
      "your-username"
    ],
    "env": {"WP_APP_PASSWORD": "your-application-password"},
    "working_directory": null,
    "start_on_launch": true
  }
}
  1. Click Save to apply the changes.

Using TEC MCP with Copilot Coding Agent

Add the following configuration to the mcp section of your Copilot Coding Agent configuration file Repository->Settings->Copilot->Coding agent->MCP configuration:

{
  "mcpServers": {
    "tec-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

For more information, see the official GitHub documentation.

See LM Studio MCP Support for more information.q

Manual set-up:

  1. Navigate to Program (right side) > Install > Edit mcp.json.

  2. Paste the configuration given below:

{
  "mcpServers": {
    "TEC MCP": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}
  1. Click Save to apply the changes.

  2. Toggle the MCP server on/off from the right hand side, under Program, or by clicking the plug icon at the bottom of the chat box.

You can configure TEC MCP in Visual Studio 2022 by following the Visual Studio MCP Servers documentation.

Add this to your Visual Studio MCP config file (see the Visual Studio docs for details):

{
  "mcp": {
    "servers": {
      "tec-mcp": {
        "type": "stdio",
        "command": "npx",
        "args": [
          "-y",
          "@the-events-calendar/mcp-server",
          "--url",
          "https://your-wordpress-site.com",
          "--username",
          "your-username"
        ],
        "env": {"WP_APP_PASSWORD": "your-application-password"}
      }
    }
  }
}

For more information and troubleshooting, refer to the Visual Studio MCP Servers documentation.

Add this to your Crush configuration file. See Crush MCP docs for more info.

Crush Local Server Connection

{
  "$schema": "https://charm.land/crush.json",
  "mcp": {
    "tec-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

Open the "Settings" page of the app, navigate to "Plugins," and enter the following JSON:

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

Once saved, you can start using the TEC MCP tools. More information is available on BoltAI's Documentation site. For BoltAI on iOS, see this guide.

Edit your Rovo Dev CLI MCP config by running the command below -

acli rovodev mcp

Example config -

Local Server Connection

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
      ],
      "env": {"WP_APP_PASSWORD": "your-application-password"}
    }
  }
}

To configure TEC MCP in Zencoder, follow these steps:

  1. Go to the Zencoder menu (...)

  2. From the dropdown menu, select Agent tools

  3. Click on the Add custom MCP

  4. Add the name and server configuration from below, and make sure to hit the Install button

{
  "command": "npx",
  "args": [
    "-y",
    "@the-events-calendar/mcp-server",
    "--url",
    "https://your-wordpress-site.com",
    "--username",
    "your-username"
  ],
  "env": {
    "WP_APP_PASSWORD": "your-application-password"
  }
}

Once the MCP server is added, you can easily continue using it.

See Qodo Gen docs for more details.

  1. Open Qodo Gen chat panel in VSCode or IntelliJ.

  2. Click Connect more tools.

  3. Click + Add new MCP.

  4. Add the following configuration:

Qodo Gen Local Server Connection

{
  "mcpServers": {
    "tec-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@the-events-calendar/mcp-server",
        "--url",
        "https://your-wordpress-site.com",
        "--username",
        "your-username"
        "--password",
        "your-password"
      ]
    }
  }
}

See Local and Remote MCPs for Perplexity for more information.

  1. Navigate Perplexity > Settings

  2. Select Connectors.

  3. Click Add Connector.

  4. Select Advanced.

  5. Enter Server Name: TEC MCP

  6. Paste the following JSON in the text area:

{
  "command": "npx"
  "args": [
    "-y",
    "@the-events-calendar/mcp-server",
    "--url",
    "https://your-wordpress-site.com",
    "--username",
    "your-username"
  ],
  "env": {
    "WP_APP_PASSWORD": "your-application-password"
  }
}
  1. Click Save.

Command-Line Options

Option

Description

--url <url>

WordPress site URL (required)

--username <username>

WordPress username (required)

--password <password>

WordPress application password (required)

--ignore-ssl-errors

Ignore SSL certificate errors (for local development)

--log-level <level>

Set logging level (error, warn, info, http, verbose, debug, silly)

--log-file <path>

Write logs to file (suppresses console output for clean MCP protocol)

--help, -h

Show help message

Authentication Setup

Creating a WordPress Application Password

  1. Log in to your WordPress admin dashboard

  2. Navigate to Users → Your Profile

  3. Scroll down to "Application Passwords" section

  4. Enter a name for this application (e.g., "MCP Server")

  5. Click "Add New Application Password"

  6. Copy the generated password (spaces can be included)

Security Best Practices

  • Never commit passwords to version control

  • Use environment variables or secure configuration files

  • Rotate application passwords regularly

  • Use SSL/HTTPS for production sites

  • Restrict application password permissions when possible

Available Tools

1. tec-calendar-create-update-entities

Create or update a post. If an ID is provided, it updates; otherwise, it creates.

Parameters:

  • postType: "event" | "venue" | "organizer" | "ticket"

  • id: (optional) Post ID for updates

  • data: Post data object (fields depend on post type)

Example - Create Event:

{
  "postType": "event",
  "data": {
    "title": "My Event",
    "start_date": "2024-12-25 10:00:00",
    "end_date": "2024-12-25 18:00:00",
    "venue": 123
  }
}

Example - Create Event with Nested Venue:

{
  "postType": "event",
  "data": {
    "title": "Conference 2024",
    "start_date": "2024-12-25 10:00:00",
    "end_date": "2024-12-25 18:00:00",
    "venue": {
      "venue": "Convention Center",
      "address": "123 Main St",
      "city": "New York",
      "state_province": "NY",
      "zip": "10001",
      "country": "US"
    }
  }
}

2. tec-calendar-read-entities

Read a single post by ID or list posts with filters.

Parameters:

  • postType: "event" | "venue" | "organizer" | "ticket"

  • id: (optional) Post ID for single post

  • query: (optional) Search term

  • Common filters (all post types):

    • page: Page number

    • per_page: Items per page (max 100 by default)

    • status: Post status

    • order: "asc" | "desc"

    • orderby: Field to order by

    • include: Array of specific IDs to include

    • exclude: Array of specific IDs to exclude

  • eventFilters: (optional) Event-specific filters

    • start_date: Events starting after this date

    • end_date: Events ending before this date

    • venue: Filter by venue ID

    • organizer: Filter by organizer ID

Example - List Events:

{
  "postType": "event",
  "per_page": 10,
  "status": "publish",
  "eventFilters": {
    "start_date": "2024-12-01",
    "end_date": "2024-12-31"
  }
}

Example - Search Events:

{
  "postType": "event",
  "query": "conference",
  "per_page": 20
}

3. tec-calendar-delete-entities

Delete a post (soft delete to trash or permanent delete).

Parameters:

  • postType: "event" | "venue" | "organizer" | "ticket"

  • id: Post ID to delete

  • force: (optional) true for permanent delete, false for trash

Example:

{
  "postType": "event",
  "id": 123,
  "force": false
}

Development

Setting Up for Development

  1. Clone the repository:

git clone https://github.com/the-events-calendar/mcp-server.git
cd mcp-server
  1. Install dependencies:

npm install
  1. Copy environment template:

cp .env.example .env
  1. Configure .env with your credentials:

WP_URL=https://your-wordpress-site.com
WP_USERNAME=your-username
WP_APP_PASSWORD=your-application-password
LOG_LEVEL=info
  1. Run in development mode:

npm run dev

Build Commands

Command

Description

npm run dev

Run in watch mode with hot reload

npm run build

Build TypeScript to JavaScript

npm start

Run the compiled server

npm run start:bun

Run with Bun runtime

npm run start:debug

Run with debug logging

Environment Variables Reference

Variable

Description

Default

WP_URL

WordPress site URL

Required

WP_USERNAME

WordPress username

Required

WP_APP_PASSWORD

Application password

Required

WP_IGNORE_SSL_ERRORS

Ignore SSL errors

false

WP_ENFORCE_PER_PAGE_LIMIT

Enforce 100 item limit

true

MCP_SERVER_NAME

Server identifier

tec-mcp-server

LOG_LEVEL

Logging verbosity

info

LOG_FILE

Log output file

Console output

Important Notes

Per-Page Limits

By default, the API limits results to 100 items per page. To disable this limit:

  • Set WP_ENFORCE_PER_PAGE_LIMIT=false in your environment

  • Or use smaller per_page values in your requests

Post Type Names

Use the simplified post type names:

  • Events: event

  • Venues: venue

  • Organizers: organizer

  • Tickets: ticket

Additional Resources

License

ISC

Available Tools

3 tools
tec-calendar-create-update-entitiesA

Create or update a calendar post (Event, Venue, Organizer, or Ticket).

For creating: provide postType and data. For updating: provide postType, id, and data.

FREE TICKETS: To create free tickets, omit the price field entirely. WordPress will automatically default to price 0. Do NOT set price to 0 explicitly as this triggers validation errors. Both Tickets Commerce and RSVP providers support free tickets when the price field is omitted.

TICKET AVAILABILITY DATES: Use start_date and end_date fields to control when tickets are available for purchase. start_date is when tickets become available, end_date is when sales stop (typically the event start time). All ticket date fields must be in Y-m-d H:i:s format (e.g., "2024-12-25 15:30:00"). If not provided, defaults to 1 week before event (start) and event start time (end). By default, end_date will be capped to the event start unless you pass allow_end_after_event: true.

SALE PRICING: To offer tickets at a reduced price during specific periods:

  • price: Regular ticket price

  • sale_price: Discounted price (must be less than regular price)

  • sale_price_start_date: When the sale price becomes active

  • sale_price_end_date: When the sale price expires (reverts to regular price)

Example: Regular $50 ticket on sale for $35 from Dec 1-15:

{
  "price": 50,
  "sale_price": 35,
  "sale_price_start_date": "2024-12-01",
  "sale_price_end_date": "2024-12-15"
}

NOTE: Ticket availability dates (start_date, end_date) must be provided in Y-m-d H:i:s format. Sale price dates (sale_price_start_date, sale_price_end_date) must be provided in YYYY-MM-DD format. UNLIMITED TICKETS: To create unlimited tickets, set stock_mode to "unlimited".

IMPORTANT: Ensure your event dates and times use the expected formats and timezone context.

Date Formats Supported

  • ISO 8601: "2024-12-25T15:00:00"

  • Date and time: "2024-12-25 15:00:00"

  • Natural language: "tomorrow 2pm", "next monday", "first thursday of next month"

  • Relative: "+3 days", "+2 hours", "3 days 1 hour"

  • Specific dates: "December 15, 2024 7:00 PM"

Workflow for Events with Dates

  1. Calculate appropriate dates for your event

  2. Create/update event with calculated dates

Create Examples

Event Creation

The Events Calendar event post type with date, location, and ticketing information

Example 1: Standard event with ISO dates

{
  "postType": "event",
  "data": {
    "title": "Conference Next Week",
    "start_date": "next monday 9am",
    "end_date": "next friday 5pm",
    "all_day": false,
    "timezone": "America/New_York",
    "venues": [
      456
    ],
    "organizers": [
      789
    ]
  }
}

Example 2: Event with natural language dates

{
  "postType": "event",
  "data": {
    "title": "Holiday Party",
    "start_date": "December 15, 2024 7:00 PM",
    "end_date": "December 15, 2024 11:30 PM",
    "all_day": false,
    "timezone": "America/Denver",
    "venues": [
      789
    ],
    "cost": "$25 per person"
  }
}

Example 3: All-day event

{
  "postType": "event",
  "data": {
    "title": "All Day Workshop",
    "start_date": "tomorrow",
    "end_date": "tomorrow",
    "all_day": true,
    "timezone": "Europe/London",
    "cost": "Free"
  }
}

Example 4: Event with venue and organizers

{
  "postType": "event",
  "data": {
    "title": "Summer Music Festival",
    "start_date": "2024-07-15 18:00:00",
    "end_date": "2024-07-15 23:00:00",
    "all_day": false,
    "timezone": "America/Los_Angeles"
  }
}

Venue Creation

Location where events take place, including address and contact information

Example 1: Complete venue with address

{
  "postType": "venue",
  "data": {
    "title": "The Grand Ballroom",
    "venue": "Grand Ballroom at the Historic Hotel",
    "address": "456 Park Avenue",
    "city": "New York",
    "state": "NY",
    "zip": "10022",
    "country": "USA",
    "phone": "+1 (212) 555-0123",
    "website": "https://grandballroom.example.com"
  }
}

Example 2: Virtual/online venue

{
  "postType": "venue",
  "data": {
    "title": "Beachside Resort",
    "venue": "Sunset Beach Resort & Spa",
    "address": "1000 Coastal Highway",
    "city": "Miami Beach",
    "state": "FL",
    "zip": "33139",
    "country": "US",
    "phone": "305-555-BEACH",
    "website": "https://sunsetbeachresort.example.com",
    "geo_lat": 25.7906,
    "geo_lng": -80.13
  }
}

Organizer Creation

Person or organization responsible for hosting events

Example 1: Organization with full contact

{
  "postType": "organizer",
  "data": {
    "title": "Local Arts Council",
    "email": "info@localartscouncil.org",
    "website": "https://localartscouncil.org",
    "phone": "(555) 123-4567"
  }
}

Example 2: Individual organizer

{
  "postType": "organizer",
  "data": {
    "title": "DJ Mike Stevens",
    "organizer": "Mike Stevens - Professional DJ",
    "email": "bookings@djmikestevens.com",
    "phone": "+1-555-DJ-MIKE",
    "website": "https://djmikestevens.example.com"
  }
}

Ticket Creation

Event ticket as returned by the API, including read-only fields like sold count and calculated values.

Example 1: Paid general admission

{
  "postType": "ticket",
  "data": {
    "title": "General Admission",
    "event": 123,
    "price": 25,
    "stock": 100,
    "capacity": 100,
    "sku": "GA-2024-001"
  }
}

Example 2: VIP ticket with limited availability

{
  "postType": "ticket",
  "data": {
    "title": "VIP Pass",
    "event": 123,
    "price": 150,
    "stock": 20,
    "capacity": 30,
    "sku": "VIP-2024-001"
  }
}

Update Examples

Updating Events

The Events Calendar event post type with date, location, and ticketing information

Partial update example 1

{
  "postType": "event",
  "id": 124,
  "data": {
    "title": "Conference Next Week",
    "start_date": "next monday 9am",
    "end_date": "next friday 5pm"
  }
}

Partial update example 2

{
  "postType": "event",
  "id": 127,
  "data": {
    "title": "Holiday Party",
    "start_date": "December 15, 2024 7:00 PM",
    "end_date": "December 15, 2024 11:30 PM"
  }
}

Updating Venues

Location where events take place, including address and contact information

Partial update example 1

{
  "postType": "venue",
  "id": 457,
  "data": {
    "address": "456 Park Avenue",
    "city": "New York",
    "phone": "+1 (212) 555-0123"
  }
}

Partial update example 2

{
  "postType": "venue",
  "id": 461,
  "data": {
    "address": "1000 Coastal Highway",
    "city": "Miami Beach",
    "phone": "305-555-BEACH"
  }
}
ParametersJSON Schema
NameRequiredDescriptionDefault
postTypeYesThe type of post to create or update
idNoPost ID (required for updates, omit for creation)
dataYesThe post data. Required fields depend on postType: Event (title, start_date, end_date), Venue (title or venue, address, city, country), Organizer (title or organizer), Ticket (title, event_id or event). Note: For Venue and Organizer, you can use "title" which will be converted to the appropriate field. For Tickets, all date fields must be in Y-m-d H:i:s format (e.g., "2024-12-25 15:30:00"). Sales dates default to 1 week before event (start) and event start date (end) if not specified. By default, ticket end_date will be capped to the event start date unless allow_end_after_event: true is provided.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: creates/updates events, venues, organizers, tickets; special rules for free tickets (omit price), ticket availability dates, sale pricing, and stock mode. However, it does not mention what the tool returns or any error conditions, which would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is long but well-structured with sections, bullet points, and examples. Front-loaded with core purpose. Some repetition across examples, but overall efficient for the complexity. Could be slightly trimmed without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters (required 2), nested data object, and no output schema, the description is extremely comprehensive: covers creation/update logic, field requirements per type, date formatting, special cases, and provides workflow and multiple examples. Sufficient for correct agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but description adds significant meaning: explains required fields per postType, date formats, special cases like free tickets and sale pricing, and provides multiple examples. This goes well beyond the schema's field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create or update a calendar post (Event, Venue, Organizer, or Ticket).' This specifies the verb (create/update) and resource (calendar post types), clearly distinguishing from sibling tools (delete, read).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use create vs update based on presence of 'id', provides detailed field requirements per postType, and includes notes on free tickets, availability dates, sale pricing, and unlimited tickets. This provides clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tec-calendar-delete-entitiesA

Delete or trash a calendar post (Event, Venue, Organizer, or Ticket).

  • Default (force=false or omitted): Moves posts to trash where they can be restored

  • Permanent delete (force=true): Permanently deletes posts with no option to restore

Delete Behaviors

  • Default (force=false): Moves to trash (recoverable)

  • Force delete (force=true): Permanent deletion (not recoverable)

Best Practices

  • Always use default trash unless permanent deletion is required

  • Consider checking post details before deletion

  • For events, verify dates and timezone context first

Examples

Event Deletion

The Events Calendar event post type with date, location, and ticketing information

Move to trash (default, recoverable)

{
  "postType": "event",
  "id": 123
}

Permanent deletion (not recoverable)

{
  "postType": "event",
  "id": 124,
  "force": true
}

Venue Deletion

Location where events take place, including address and contact information

Move to trash (default, recoverable)

{
  "postType": "venue",
  "id": 456
}

Permanent deletion (not recoverable)

{
  "postType": "venue",
  "id": 457,
  "force": true
}

Organizer Deletion

Person or organization responsible for hosting events

Move to trash (default, recoverable)

{
  "postType": "organizer",
  "id": 789
}

Permanent deletion (not recoverable)

{
  "postType": "organizer",
  "id": 790,
  "force": true
}
ParametersJSON Schema
NameRequiredDescriptionDefault
postTypeYesThe type of post to delete
idYesPost ID to delete
forceNotrue for permanent delete, false for trash (default: false)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains default recoverable trash vs permanent deletion. Does not mention potential side effects like cascading deletes or access requirements, but is transparent about the core behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with headings, bullet points, and examples. Front-loaded with purpose. Some redundancy (Delete Behaviors section repeats prior info), but overall efficient and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers behavior for all post types with examples and best practices. Missing details on cascading effects or output format, but given no output schema and simplicity of tool, it is sufficiently complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds value by explaining the force parameter's effect and providing examples for each post type. The examples clarify usage beyond schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb (delete or trash) and the resources (Event, Venue, Organizer, Ticket). It distinguishes between default trash and permanent delete, and the name differentiates it from create-update and read siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides best practices (use default trash unless permanent deletion required) and suggests checking post details before deletion. However, it does not explicitly contrast with alternatives or provide when-not-to-use scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tec-calendar-read-entitiesA

Read, list, or search calendar posts.

Use Cases

  1. Get single post: provide postType and id

  2. List all posts: provide postType only

  3. Search posts: provide postType and query

Query Capabilities

  • Get single post by ID

  • List all posts with pagination

  • Search posts by keyword

  • Filter by post-specific criteria

  • Combine multiple filters

Examples

Basic Queries

1. Get specific event by ID

{ "postType": "event", "id": 123 }

2. List all venues with pagination

{ "postType": "venue", "per_page": 20, "page": 1 }

3. Search events by keyword

{ "postType": "event", "search": "conference" }

4. Get all organizers sorted by name

{ "postType": "organizer", "orderby": "title", "order": "asc" }

Date Filtering

5. Get upcoming events

{
  "postType": "event",
  "eventFilters": {
    "start_date": "2024-12-06"
  }
}

6. Get events in date range

{
  "postType": "event",
  "eventFilters": {
    "start_date": "2024-12-01",
    "end_date": "2024-12-31"
  }
}

Location Filtering

7. Find venues by city and state

{
  "postType": "venue",
  "venueFilters": {
    "city": "San Francisco",
    "state": "CA"
  }
}

8. Find venues near coordinates

{
  "postType": "venue",
  "venueFilters": {
    "geo_lat": 37.7749,
    "geo_lng": -122.4194,
    "radius": 10
  }
}

Relationship Queries

9. Get events at specific venue

{ "postType": "event", "eventFilters": { "venue": 456 } }

10. Get tickets for specific event

{ "postType": "ticket", "ticketFilters": { "event": 123 } }

11. Get available tickets only

{
  "postType": "ticket",
  "ticketFilters": {
    "event": 123,
    "available": true
  }
}

Status & Filtering

12. Get only published events

{ "postType": "event", "status": "publish" }

13. Get draft and pending venues

{ "postType": "venue", "status": ["draft", "pending"] }

Complex Queries

14. Search published events at venues with dates

{
  "postType": "event",
  "search": "workshop",
  "status": "publish",
  "eventFilters": {
    "venue": 456,
    "start_date": "2024-12-01"
  },
  "per_page": 50
}

15. Get tickets under $50 sorted by price

{
  "postType": "ticket",
  "ticketFilters": {
    "max_price": 50,
    "available": true
  },
  "orderby": "price",
  "order": "asc"
}

Available Filters

  • eventFilters: venue, organizer, featured, categories, tags

  • venueFilters: city, state, country, zip, geo_lat/lng, radius

  • ticketFilters: event, type, provider, min/max_price

  • organizerFilters: email, website, phone

  • Common: status, search, include, exclude, page, per_page, orderby

ParametersJSON Schema
NameRequiredDescriptionDefault
postTypeYesThe type of post to read
idNoPost ID for single post retrieval
queryNoSearch query string
pageNoPage number
per_pageNoItems per page
orderNoSort order
orderbyNoField to order by
statusNoPost status filter
includeNoInclude specific IDs
excludeNoExclude specific IDs
eventFiltersNoEvent-specific filters (only used when postType is "event")
venueFiltersNoVenue-specific filters (only used when postType is "venue")
organizerFiltersNoOrganizer-specific filters (only used when postType is "organizer")
ticketFiltersNoTicket-specific filters (only used when postType is "ticket")

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It implies read-only behavior through examples and the tool name, but it does not explicitly state that this tool does not modify data, require specific permissions, or have rate limits. The examples are thorough but lack a clear safety statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear hierarchy: purpose, use cases, examples, and filter summary. It is front-loaded with essential information. However, it is lengthy due to 15 examples; some could be condensed without losing clarity. Overall, it balances detail and organization well.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (14 parameters, nested objects, no output schema), the description covers parameter usage comprehensively but is incomplete regarding return values, pagination behavior, and error handling. With no output schema, the agent would benefit from knowing what the response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, yet the description adds significant value by grouping parameters into use cases, providing 15 detailed examples showing valid combinations, and explaining conditional filters (e.g., eventFilters only for events). This greatly enhances parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read, list, or search calendar posts' and immediately outlines three use cases (get single, list all, search). The tool name 'tec-calendar-read-entities' combined with sibling tools for create-update and delete effectively distinguishes its purpose as read-only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear use cases and example queries that guide when to use each mode (single vs list vs search). However, it does not explicitly state when not to use this tool (e.g., for modifications) or reference sibling tools. The context from sibling names helps, but an explicit exclusion would improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a distinct action (create/update, delete, read) on a unified set of entities. There is no overlap or ambiguity; agents can easily distinguish based on the verb.

Naming Consistency5/5

All tools follow the pattern `tec-calendar-<action>-entities` with consistent snake_case. The naming is predictable and clear.

Tool Count4/5

Three tools is minimal but sufficient for the core CRUD operations across four entity types. The scope is well-defined and each tool earns its place, though a dedicated tool for listing or searching could further improve the surface.

Completeness4/5

The tools cover create/update, delete, and read (including advanced filtering and pagination) for events, venues, organizers, and tickets. Minor gaps like managing categories or tags exist, but the core lifecycle is solid.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/the-events-calendar/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server