Skip to main content
Glama
JanProvaznik

Czech Railways (České dráhy) MCP Server

by JanProvaznik

Server Quality Checklist

58%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v1.0.0

  • Disambiguation4/5

    Tools have distinct purposes, but get_connection_details and get_price_offer are noted as redundant with search results, which could cause agent confusion if they attempt to use them and fail.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using snake_case: get_* and search_*. No naming anomalies.

    Tool Count4/5

    5 tools is a reasonable size for a railway information server, but two tools are marked as unavailable with the mobile API, suggesting they could be removed.

    Completeness3/5

    Covers basic query operations (search stations, connections, passenger types), but lacks booking, real-time info, or station details, and duplicate tools reduce practical completeness.

  • Average 3.6/5 across 5 of 5 tools scored.

    See the Tool Scores section below for per-tool breakdowns.

    • 0 of 1 community issues answered or closed in the last 6 months
    • 0 commits in the last 12 weeks
    • No stable releases found
    • No critical vulnerability alerts
    • No high-severity vulnerability alerts
    • No code scanning findings
    • CI status not available
  • Add a LICENSE file by following GitHub's guide. Once GitHub recognizes the license, the system will automatically detect it within a few hours.

    If the license does not appear after some time, you can manually trigger a new scan using the MCP server admin interface.

    MCP servers without a LICENSE cannot be installed.

  • This repository includes a README.md file.

  • No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.

    Tip: use the "Try in Browser" feature on the server page to seed initial usage.

  • Add a glama.json file to provide metadata about your server.

  • If you are the author, simply .

    If the server belongs to an organization, first add glama.json to the root of your repository:

    {
      "$schema": "https://glama.ai/mcp/schemas/server.json",
      "maintainers": [
        "your-github-username"
      ]
    }

    Then . Browse examples.

  • Add related servers to improve discoverability.

How to sync the server with GitHub?

Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.

To manually sync the server, click the "Sync Server" button in the MCP server admin interface.

How is the quality score calculated?

The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).

Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.

Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).

Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.

Tool Scores

  • Behavior2/5

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

    No annotations are provided, and the description only notes that prices are included in search results. It does not disclose behavioral traits such as idempotency, error states, or requirements (e.g., valid connectionId).

    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 with two sentences. The first sentence delivers the primary purpose, and the second provides relevant context. No superfluous information.

    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?

    For a simple tool with no output schema, the description covers the basic purpose and a usage caveat. However, it lacks details on expected return values or error conditions, leaving some gaps.

    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 coverage is 100%, meaning both parameters are described in the input schema. The description adds no extra meaning beyond what the schema already provides, meeting the baseline expectation.

    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 ('Get a price offer') and the target ('for a specific connection'). It is specific and unambiguous, but does not explicitly distinguish from sibling tools like get_connection_details or search_connections.

    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 mentions that prices are already in search results and that the endpoint is not available in the mobile API, implying when not to use it. However, it lacks explicit guidance on when to prefer this tool over alternatives.

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

  • 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 disclosing behavioral traits. It does not state that the operation is read-only, nor does it mention authentication, rate limits, or what happens when no results are found. The description only describes the output format, leaving safety and behavioral assumptions unstated. This is insufficient for a tool with no annotation support.

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

    Conciseness3/5

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

    The description is a single sentence, very concise, but at the cost of missing essential behavioral and usage guidance. Every word earns its place in describing the function and output, but the minimal length neglects important context. It is not overly verbose, but the lack of structural elements (e.g., separate sections or bullet points) reduces clarity for an agent.

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

    Completeness2/5

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

    Given the complexity of 4 parameters, no output schema, and missing annotations, the description is incomplete. It does not explain the exact structure of the return value (e.g., pagination, fields beyond those listed) or how to handle errors. The presence of siblings suggests a workflow, but no guidance is provided. For a tool that likely feeds into get_connection_details or get_price_offer, the description should be more comprehensive.

    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 input schema has 100% description coverage, so parameters are already documented. The description adds no extra meaning beyond what the schema provides (e.g., it mentions 'two stations' but that is already covered by from/to fields). The description does not clarify constraints like station name format or ISO 8601 precision beyond the schema. Baseline score of 3 is appropriate since schema does the heavy lifting.

    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 verb 'search' and the resource 'train connections between two stations'. It explicitly mentions the return type: available trains with departure times, duration, and transfers. This distinguishes it from siblings like get_connection_details, which would focus on a specific connection, and search_locations for stations. The purpose is unambiguous and specific.

    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 implies usage for finding connections but provides no explicit guidance on when to use this tool versus alternatives like get_connection_details or search_locations. No exclusions or prerequisites are mentioned. The usage context is implied through the action and parameters, but without clear differentiation from siblings, the agent may not know when to choose this over other tools.

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

  • Behavior3/5

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

    No annotations provided, so the description carries full burden for behavioral disclosure. It correctly implies a read operation but does not explicitly state safety, authentication needs, or latency. For a simple list tool, this is adequate but not thorough.

    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 sentence that efficiently communicates the tool's purpose and includes specific examples. No superfluous information; every word earns its place.

    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?

    For a tool with no parameters and a simple output, the description adequately covers what it returns. However, it lacks details on output structure (e.g., array format) since no output schema is provided. Still, it is sufficient for an AI to understand the tool's role.

    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?

    There are no parameters, so schema coverage is 100% trivially. The description adds value by listing examples of passenger types (adult, child, senior, student discounts), providing context beyond the empty schema. Baseline for 0 params is 4.

    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 retrieves a list of passenger types and discount categories, with specific examples. The verb 'Get' and resource 'list of available passenger types' are precise. It distinguishes from sibling tools that deal with connections, prices, and locations.

    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 explicit guidance on when to use this tool versus alternatives. While the purpose is clear, the description lacks information on prerequisites or typical usage context, such as calling this before searching connections.

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

  • Behavior3/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. It discloses the mobile API limitation but does not mention auth, rate limits, or non-destructive nature. The 'get' verb implies read-only, which is adequate but not explicit.

    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?

    Two sentences: first states the purpose, second adds a crucial usage note. No wasted words, front-loaded, and to the point.

    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?

    The description covers the tool's purpose and a key limitation, but lacks details on what 'detailed information' includes (e.g., stops, prices). With no output schema, more context on return content would be helpful, though not critical for a simple tool.

    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 coverage is 100% and both parameters (handle, connectionId) are well-described in the schema. The description adds no extra parameter meaning, which is acceptable given the schema covers it.

    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 it gets detailed information about a specific train connection, distinguishing it from sibling search_connections which lists connections. The note about mobile API adds specificity.

    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 explicitly says to get details of a specific connection and notes it is not available with the mobile API, implying use search_connections instead. This provides clear context but lacks an explicit alternative mention.

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

  • Behavior3/5

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

    With no annotations provided, the description must carry the burden of behavioral disclosure. It reveals the scope (Czech Railways network) and purpose (find station codes) but lacks details on authentication, rate limits, or response behavior (e.g., fuzzy matching, sorting). The description is adequate but not exhaustive.

    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 two sentences, front-loaded with the purpose, and contains no unnecessary words. Every sentence adds value, making it highly efficient for an AI agent to parse.

    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 simple tool (2 params, no output schema), the description provides enough context for a basic use case. However, it could be more complete by mentioning response format (e.g., list of stations with codes) or behavior on partial matches. Still, it meets the minimum needs.

    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 100%, so the schema already documents both parameters (query and type). The description adds extra context (e.g., 'Czech Railways network', examples) but does not significantly enhance understanding beyond the schema's own descriptions. Baseline 3 is appropriate.

    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 specifies the action ('Search for') and the resources ('train stations and cities') within the Czech Railways network. It distinguishes itself from sibling tools by explicitly stating it finds station codes for connection searches, which is a specific use case different from tools like search_connections.

    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 states to use this tool to find station codes for connection searches, giving clear context. However, it does not explicitly mention when not to use it or provide alternatives, leaving some ambiguity about handling cases where the location is not found.

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

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues.
  • Evaluate tool definition quality.

Our badge communicates server capabilities, safety, and installation instructions.

Card Badge

cd-mcp MCP server

Copy to your README.md:

Score Badge

cd-mcp MCP server

Copy to your README.md:

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/JanProvaznik/cd-mcp'

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