Skip to main content
Glama
anewt225

Philly Events MCP Server

by anewt225

Search Philadelphia Events

philly_search_events
Read-onlyIdempotent

Search Philadelphia events from Do215, Visit Philly, and Eventbrite; filter deduplicated results by date, category, neighborhood, free status, or price.

Instructions

Search for events across all Philadelphia event sources (Do215, Visit Philly, Eventbrite).

This is the primary tool for discovering events happening in Philadelphia. It aggregates results from multiple sources, deduplicates them, and allows filtering by various criteria.

Args:

  • query (string, optional): Text to search in event titles, descriptions, and locations

  • categories (array, optional): Filter by categories like 'music', 'food_drink', 'arts_culture', 'sports', 'nightlife', 'comedy', 'outdoor', 'family', 'community', 'workshop', 'networking', 'film', 'theater', 'markets', 'festivals'

  • neighborhoods (array, optional): Filter by Philly neighborhoods like 'Fishtown', 'Center City', 'Rittenhouse', 'Northern Liberties', 'Old City', etc.

  • start_date (string, optional): Start date in YYYY-MM-DD format

  • end_date (string, optional): End date in YYYY-MM-DD format

  • is_free (boolean, optional): Only return free events

  • max_price (number, optional): Maximum ticket price in USD

  • limit (number): Max results to return (default: 20, max: 100)

  • offset (number): Pagination offset (default: 0)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Aggregated event listings from all sources with deduplication.

Examples:

  • "Find live music this weekend" → query="live music", categories=["music"]

  • "Free outdoor events in Fishtown" → is_free=true, categories=["outdoor"], neighborhoods=["Fishtown"]

  • "Comedy shows under $30" → categories=["comedy"], max_price=30

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of events to return (default: 20, max: 100)
queryNoSearch text to match against event titles, descriptions, and locations
offsetNoNumber of events to skip for pagination
is_freeNoFilter for free events only
end_dateNoEnd date for event search (YYYY-MM-DD format)
max_priceNoMaximum ticket price in USD
categoriesNoFilter by event categories (e.g., music, food_drink, arts_culture)
start_dateNoStart date for event search (YYYY-MM-DD format)
neighborhoodsNoFilter by Philadelphia neighborhoods (e.g., Fishtown, Center City, Rittenhouse)
response_formatNoOutput format: markdown for readable text, json for structured datamarkdown

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description still adds real behavior: cross-source aggregation, deduplication, and a summary of the return payload. It does not mention rate limits, source-failure behavior, or result ordering, which keeps it from a 5.

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?

Front-loads the one-line purpose, then a scoping sentence, then Args/Returns/Examples. The Args block largely restates the schema descriptions and is the longest section, but it is well-organized and every section is scannable; nothing is buried.

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?

With 10 parameters, zero required, and no output schema, the definition supplies enough to call the tool correctly: all parameters documented, defaults noted, and examples given. It omits what happens with no filters at all (default result set, ordering, or how pagination interacts with deduplication), a minor gap given the tool's breadth.

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 description coverage is 100%, so the baseline is 3. The description goes beyond it by enumerating concrete category and neighborhood values and, more usefully, providing natural-language-to-parameter mappings ('Comedy shows under $30' → categories=["comedy"], max_price=30) that show how parameters combine.

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?

States a specific verb and resource ('Search for events') plus a precise scope ('across all Philadelphia event sources'), and explicitly notes that it 'aggregates results from multiple sources, deduplicates them.' That aggregation framing distinguishes it from the sibling philly_search_source (single-source) without the agent needing to open schemas.

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?

Declares primacy ('This is the primary tool for discovering events happening in Philadelphia') and the worked examples show concrete when-to-use patterns ('Find live music this weekend'). However, it never states when NOT to use it, e.g. routing to philly_list_categories for browsing filters or philly_search_source for a single source.

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