Skip to main content
Glama
nhannpl

Winnipeg City MCP Server

by nhannpl

Winnipeg City MCP Server

A powerful Model Context Protocol (MCP) server that enables AI assistants to access real-time Winnipeg Transit data and 311 City Services information. This server allows AI models like Claude to help users plan trips, check bus arrivals, find stops, and explore city service reports.

Features

  • 🚌 Real-time Transit Information: Get live bus arrival times and route status

  • πŸ—ΊοΈ Trip Planning: Plan single trips or multi-stop journeys with optimized routes

  • πŸ“ Location Search: Find bus stops near any location

  • πŸ™οΈ 311 City Services: Search for reported issues and explore neighborhoods

  • ⏱️ Time-Aware Routing: Get accurate transit schedules based on actual timetables

Related MCP server: OC Transpo MCP Server

Tools Included

Transit

  • get_bus_arrivals: Get real-time bus arrivals for a specific stop

  • get_commute_status: Check status of specific bus routes

  • find_stops_near: Find bus stops near a location

  • plan_trip: search for a trip from an origin to a destination

  • plan_journey: Plan a multi-stop journey

City Services

  • search_311_issues: Search for reported 311 issues

  • list_neighborhoods: List Winnipeg neighborhoods

Prerequisites

  • uv (recommended for running the script)

  • Python 3.12+

  • Winnipeg Transit API key (see setup instructions below)

Setup

1. Get a Winnipeg Transit API Key

To use the transit features, you'll need a free API key from Winnipeg Transit:

  1. Visit the Winnipeg Transit API Registration page

  2. Sign up for a free developer account

  3. Once approved, you'll receive your API key via email

2. Configure Environment Variables

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and add your API key:

    TRANSIT_API_KEY=your_actual_api_key_here

How to Run

You can run the server directly using uv:

uv run server.py

Connecting to Claude Desktop

To use this MCP server with the Claude Desktop app:

  1. Open your Claude Desktop configuration file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. Add the following configuration (replace /ABSOLUTE/PATH/TO/ with the actual path to this repository):

{
  "mcpServers": {
    "winnipeg-city": {
      "command": "uv",
      "args": [
        "run",
        "/ABSOLUTE/PATH/TO/wpg-city-mcp/server.py"
      ]
    }
  }
}
  1. Restart Claude Desktop.

Debugging with MCP Inspector

You can test and debug the server using the MCP Inspector:

npx @modelcontextprotocol/inspector uv run server.py

This will start the Inspector in your browser, allowing you to manually call tools and verify the server's behavior.

Contributing

Contributions are welcome! Feel free to:

  • Report bugs or suggest features by opening an issue

  • Submit pull requests with improvements

  • Improve documentation

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

Available Tools

8 tools
find_stops_nearA
Search for bus stops near a specific geographic coordinate.
Useful when you know the location (e.g. from a user's known lat/lon) but need stop IDs.

NOTE: Distance is capped at 2000 meters to allow efficient querying.
ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
distance_metersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. It discloses key behavioral traits: the distance cap ('Distance is capped at 2000 meters') and efficiency consideration ('to allow efficient querying'). However, it does not mention other potential behaviors like rate limits, authentication needs, or error handling, which could be relevant for a search tool.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded, with the core purpose stated first, followed by usage context and a behavioral note. Each sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.

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?

Given the tool's moderate complexity (3 parameters, no annotations, but with an output schema), the description is mostly complete. It covers purpose, usage, and a key behavioral constraint. Since an output schema exists, it need not explain return values, but it could benefit from mentioning prerequisites (e.g., coordinate format) or error cases to be fully comprehensive.

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?

With schema description coverage at 0%, the description must compensate. It adds meaning by explaining that parameters are for 'a specific geographic coordinate' and that distance is 'capped at 2000 meters,' which clarifies the purpose of lat, lon, and distance_meters beyond their schema titles. However, it does not detail the units or constraints for lat/lon (e.g., valid ranges) or the default value for distance_meters.

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 the tool's purpose: 'Search for bus stops near a specific geographic coordinate.' It specifies the verb ('Search'), resource ('bus stops'), and context ('near a specific geographic coordinate'), distinguishing it from siblings like get_bus_arrivals or plan_journey. The additional note about obtaining stop IDs further clarifies the output intent.

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 context for when to use this tool: 'Useful when you know the location (e.g. from a user's known lat/lon) but need stop IDs.' However, it does not explicitly state when not to use it or name alternatives among the sibling tools, such as using plan_trip for route planning instead.

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

get_bus_arrivalsB

Get real-time bus arrivals for a specific Winnipeg Transit stop number.

ParametersJSON Schema
NameRequiredDescriptionDefault
stop_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool provides 'real-time' data, which implies freshness and potential rate limits or API constraints, but doesn't elaborate on these aspects. It doesn't mention error handling, authentication needs, data format, or whether the operation is read-only (though implied by 'get'). More context on behavioral traits would help the agent.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose. Every word earns its place: 'Get' (action), 'real-time bus arrivals' (what's retrieved), 'for a specific Winnipeg Transit stop number' (context and parameter). There's no redundancy or unnecessary elaboration, making it highly concise and well-structured.

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?

Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers the essential purpose and parameter context. However, it lacks usage guidelines and behavioral details that would make it fully comprehensive, especially with no annotations to supplement it.

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

Parameters3/5

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

The schema description coverage is 0%, so the description must compensate. It adds meaning by specifying that 'stop_number' refers to a 'Winnipeg Transit stop number', which clarifies the parameter's domain beyond just being an integer. However, it doesn't provide examples, valid ranges, or format details (e.g., typical stop number length), leaving gaps in parameter understanding.

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 the specific action ('Get real-time bus arrivals'), identifies the resource ('Winnipeg Transit stop number'), and distinguishes from siblings like 'find_stops_near' (which finds stops) or 'plan_trip' (which plans journeys). It uses precise language that leaves no ambiguity about the tool's function.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid stop number), exclusions (e.g., not for historical data), or comparisons to siblings like 'plan_journey' or 'get_commute_status'. The agent must infer usage context solely from the tool name and description.

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

get_commute_statusB
Smart Commute: Get bus arrivals combined with current weather conditions.
Helpful for deciding if you need a parka or just a light jacket while waiting.
ParametersJSON Schema
NameRequiredDescriptionDefault
stop_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions combining bus arrivals and weather, which hints at data aggregation, but lacks details on behavioral traits such as rate limits, authentication needs, error handling, or whether it's read-only or has side effects. The description adds minimal context beyond the basic function.

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 concise and front-loaded, with the core purpose stated first in two sentences. The second sentence adds helpful context without being verbose. However, the lack of parameter information slightly reduces efficiency, as it could integrate key details more seamlessly.

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 moderate complexity (one parameter) and the presence of an output schema (which handles return values), the description is somewhat complete for basic understanding. However, with no annotations and low parameter coverage, it lacks sufficient detail on usage scenarios, behavioral aspects, and parameter meaning, making it only minimally adequate.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter documentation. It does not mention the 'stop_number' parameter at all, offering no semantic context beyond what the schema provides. This leaves the parameter's purpose and usage unclear, failing to add value.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get bus arrivals combined with current weather conditions.' It specifies the verb ('Get') and resources ('bus arrivals' and 'weather conditions'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_bus_arrivals'β€”the addition of weather is implied but not contrasted.

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

Usage Guidelines3/5

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

Usage is implied through the example scenario ('deciding if you need a parka or just a light jacket while waiting'), suggesting it's for commute planning with weather considerations. No explicit guidance on when to use this tool versus alternatives like 'get_bus_arrivals' or 'plan_journey' is provided, leaving some ambiguity.

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

list_neighborhoodsB
Get a list of Winnipeg neighborhoods that have had recent 311 activity.
Optionally filter by a search_term (e.g., 'Fort').
ParametersJSON Schema
NameRequiredDescriptionDefault
search_termNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'recent 311 activity,' which hints at data recency, but doesn't specify what 'recent' means, how the list is structured, if there are rate limits, or any error conditions. This leaves significant gaps in understanding the tool's behavior beyond basic functionality.

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

Conciseness5/5

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

The description is highly concise and front-loaded, with two sentences that directly state the purpose and parameter usage without any wasted words. Each sentence adds clear value, making it easy to scan and understand quickly.

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 low complexity (one optional parameter) and the presence of an output schema, the description is adequate for basic use. However, without annotations and with gaps in behavioral details (e.g., definition of 'recent'), it doesn't fully prepare the agent for edge cases or advanced scenarios, though the output schema may cover return values.

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?

The description adds meaningful context for the single parameter 'search_term' by providing an example ('e.g., 'Fort'') and clarifying it's optional, which helps interpret its use. Since schema description coverage is 0% and there's only one parameter, this compensates well, though it doesn't detail format constraints beyond the example.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get a list of Winnipeg neighborhoods that have had recent 311 activity.' It specifies the verb ('Get'), resource ('Winnipeg neighborhoods'), and scope ('recent 311 activity'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'search_311_issues', which might also involve 311 data, leaving room for minor ambiguity.

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

Usage Guidelines3/5

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

The description provides some implied usage guidance by mentioning the optional 'search_term' filter, suggesting it can be used for targeted queries. However, it lacks explicit guidance on when to use this tool versus alternatives like 'search_311_issues' or other siblings, and doesn't specify prerequisites or exclusions, leaving the agent to infer context.

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

plan_journeyB
Plan a multi-stop journey (A -> B -> C ...).

Args:
    stops: List of locations (plain text, stop numbers, or formatted keys)
    optimize: If True, optimized the visit order (TSP) starting from the first stop.
    date: Optional start date (YYYY-MM-DD or equivalent accepted by API).
    time: Optional start time (HH:MM).
ParametersJSON Schema
NameRequiredDescriptionDefault
stopsYes
optimizeNo
dateNo
timeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions optimization ('optimized the visit order (TSP) starting from the first stop') and optional date/time parameters, but it doesn't cover critical aspects like permissions, rate limits, error handling, or what the output contains. For a planning tool with no annotation coverage, this leaves significant gaps in understanding its 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?

The description is appropriately sized and front-loaded, starting with the core purpose followed by parameter details. Each sentence adds value without redundancy. However, the formatting with 'Args:' and bullet-like points is slightly informal, and it could be more structured for clarity, preventing a perfect score.

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 (planning multi-stop journeys) and the presence of an output schema, the description is minimally adequate. It covers the basic purpose and parameters but lacks behavioral context (e.g., how optimization works in practice) and doesn't leverage the output schema to explain return values. With no annotations and moderate parameter coverage, it meets baseline completeness but has clear gaps.

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?

The description adds substantial meaning beyond the input schema, which has 0% description coverage. It explains that 'stops' are 'List of locations (plain text, stop numbers, or formatted keys)', clarifies that 'optimize' uses 'TSP' and starts from the first stop, and notes that 'date' and 'time' are optional with format examples. This compensates well for the schema's lack of descriptions, though it could be more detailed on parameter interactions.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Plan a multi-stop journey (A -> B -> C ...).' It specifies the verb ('Plan') and resource ('multi-stop journey'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'plan_trip' or 'plan_timed_itinerary', which prevents a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'plan_trip' or 'plan_timed_itinerary', nor does it specify prerequisites or exclusions. The only implied usage is for multi-stop journeys, but without explicit comparisons, this is insufficient.

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

plan_timed_itineraryB
Plan an optimized itinerary with specific stay durations at each stop.

Args:
    stops_config: List of dictionaries. The first stop is the origin.
        Each item format: {"location": "...", "min_stay": minutes, "max_stay": minutes}
        (Stay times for the LAST stop are ignored).
    start_date: YYYY-MM-DD
    start_time: HH:MM
ParametersJSON Schema
NameRequiredDescriptionDefault
stops_configYes
start_dateNo
start_timeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'optimized itinerary' but doesn't explain what optimization entails (e.g., time, cost, distance), whether it's read-only or mutative, error handling, rate limits, or authentication needs. The note about 'Stay times for the LAST stop are ignored' is a useful behavioral detail, but overall disclosure is minimal for a planning tool.

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 appropriately sized and front-loaded, with the core purpose stated first, followed by parameter details. The 'Args:' section is structured but could be more concise (e.g., combining format details). Every sentence adds value, though minor trimming is possible.

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 complexity (planning tool with 3 parameters, 0% schema coverage, no annotations, but with an output schema), the description is moderately complete. It covers parameter semantics well but lacks behavioral transparency and usage guidelines. The output schema existence means return values needn't be explained, but other gaps remain for effective tool use.

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 0%, so the description must compensate. It adds significant meaning beyond the schema by detailing the structure of 'stops_config' (list of dictionaries with 'location', 'min_stay', 'max_stay' keys), clarifying that the first stop is the origin, and specifying date/time formats. However, it doesn't explain the 'additionalProperties' in the schema or the nullable/default behavior of 'start_date' and 'start_time'.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Plan an optimized itinerary with specific stay durations at each stop.' It specifies the verb ('plan'), resource ('itinerary'), and key constraint ('with specific stay durations'), distinguishing it from siblings like 'plan_journey' or 'plan_trip' that lack duration specifications. However, it doesn't explicitly contrast with all siblings, such as 'get_bus_arrivals' or 'search_311_issues', which are clearly different.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'plan_journey' or 'plan_trip', nor does it specify prerequisites, exclusions, or contextual cues for selection. The only implied usage is for itinerary planning with stay durations, but this is redundant with purpose clarity.

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

plan_tripB
Plan a trip between two points using Winnipeg Transit.

Arguments 'origin' and 'destination' can be:
- Plain text addresses or landmarks (e.g. "The Forks", "IKEA", "123 Main St") - Resolved via OSM
- Stop numbers (e.g. "10625", "Stop 10541")
- Formatted keys:
    - "stops/{key}"
    - "geo/{lat},{lon}"
    - "intersection/{key}"
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
destinationYes
modeNodepart-after
dateNo
timeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains how 'origin' and 'destination' arguments are resolved (via OSM for addresses/landmarks, stop numbers, or formatted keys), which adds useful context. However, it doesn't cover other behavioral aspects like error handling, rate limits, authentication needs, or what the output contains (though an output schema exists).

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

Conciseness5/5

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

The description is highly concise and well-structured. The first sentence states the purpose clearly, followed by a bulleted list explaining argument formats. Every sentence earns its place, with no redundant or vague language, making it easy to scan and understand.

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 moderate complexity (5 parameters, no annotations, but with an output schema), the description is partially complete. It thoroughly explains 'origin' and 'destination' but omits details on 'mode', 'date', and 'time'. The output schema likely covers return values, so that gap is acceptable. However, for a planning tool with siblings, more usage context would improve completeness.

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?

The description adds significant meaning for 'origin' and 'destination' parameters, detailing acceptable formats (plain text addresses, stop numbers, formatted keys) and resolution methods (OSM). This compensates for the 0% schema description coverage. It doesn't address 'mode', 'date', or 'time', but with 5 total parameters and 2 well-documented, it provides substantial value beyond the bare schema.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Plan a trip between two points using Winnipeg Transit.' It specifies the verb ('plan'), resource ('trip'), and service provider ('Winnipeg Transit'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'plan_journey' or 'plan_timed_itinerary', which appear related.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'plan_journey' or 'plan_timed_itinerary', nor does it specify prerequisites, constraints, or typical use cases. The agent must infer usage from the tool name and description alone.

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

search_311_issuesB

Search for recent 311 service requests in a specific Winnipeg neighborhood.

ParametersJSON Schema
NameRequiredDescriptionDefault
neighborhoodYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'recent' service requests, hinting at temporal filtering, but doesn't disclose key behaviors like pagination, rate limits, authentication needs, error handling, or what 'recent' means. This leaves significant gaps for an agent to use it correctly.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It front-loads the key action and scope, making it easy to parse quickly. Every word contributes directly to understanding the tool's purpose.

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 1 parameter with 0% schema coverage and no annotations, but with an output schema (which handles return values), the description is minimally adequate. It covers the core purpose and parameter context but lacks behavioral details and usage guidance, making it incomplete for safe and effective use.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning by specifying that the 'neighborhood' parameter is for Winnipeg and relates to 311 service requests, but doesn't provide format examples, valid values, or constraints beyond what's implied. This partially compensates but leaves ambiguity.

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

Purpose4/5

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

The description clearly states the action ('Search for') and resource ('311 service requests'), with geographic scope ('Winnipeg neighborhood') and temporal qualifier ('recent'). It distinguishes from siblings by focusing on 311 issues rather than transit or planning tools, though it doesn't explicitly contrast with them.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description implies usage for 311 service requests in Winnipeg neighborhoods, but it doesn't mention prerequisites, when not to use it, or how it differs from potential similar tools (none listed as siblings).

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

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have distinct purposes, but 'plan_journey', 'plan_timed_itinerary', and 'plan_trip' could cause confusion due to overlapping trip-planning functionality. Their descriptions clarify differences (multi-stop vs. timed itinerary vs. point-to-point), but an agent might initially misselect without careful reading.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern throughout (e.g., 'find_stops_near', 'get_bus_arrivals'), with only minor deviations like 'plan_timed_itinerary' being slightly longer. The naming is predictable and readable, supporting easy identification.

Tool Count5/5

With 8 tools, the count is well-scoped for a city transit and services server. Each tool addresses a specific aspect of Winnipeg's public services (e.g., transit stops, arrivals, journeys, neighborhoods, 311 issues), avoiding bloat while covering core functionalities.

Completeness4/5

The toolset provides strong coverage for transit planning, real-time arrivals, and neighborhood/311 services, with no major gaps in core workflows. Minor gaps might include lack of tools for transit alerts or detailed neighborhood demographics, but agents can work effectively with the available tools.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables users to interact with Washington DC Metro (WMATA) transit system through natural language queries. Provides real-time train arrivals, service alerts, station information, trip planning, and accessibility updates.
    592
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time transit data for OC Transpo in Ottawa, including live vehicle positions and trip updates via GTFS-RT feeds. It enables AI agents to monitor arrival delays, schedule changes, and transit telemetry through the Model Context Protocol.
    2

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/nhannpl/wpg-city-mcp'

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