Skip to main content
Glama
0x-Professor

CTFtime MCP Server

by 0x-Professor

CTFtime MCP Server

A Model Context Protocol (MCP) server providing programmatic access to CTFtime.org data. Retrieve information about CTF competitions, team rankings, event details, and competition results through a standardized interface.

MCP Compatible Python 3.13+ License: MIT MCP Badge

Features

Tools

Tool

Description

get_upcoming_ctfs

Retrieve upcoming CTF events with configurable time range

get_past_ctfs

Retrieve historical CTF events

get_event_details

Get comprehensive information about a specific event

get_top_teams

Query global CTF team rankings

get_top_teams_by_country

Query regional team rankings by country code

get_team_info

Retrieve detailed team information and statistics

get_event_results

Access competition results and scores

search_events

Search events by name, description, or organizer

get_ctf_calendar

View monthly calendar of CTF events

Prompts

Prompt

Description

analyze_ctf_event

Generate analysis for a specific CTF event

find_beginner_ctfs

Identify beginner-friendly competitions

team_performance_analysis

Analyze team performance metrics

weekly_ctf_briefing

Generate weekly competition summary

country_ctf_scene

Analyze regional CTF community

Resources

Resource URI

Description

ctftime://info

Server and platform documentation

ctftime://formats

CTF competition format reference

ctftime://categories

Challenge category documentation

Related MCP server: mcp-ctftime

Installation

Prerequisites

  • Python 3.13 or higher

  • uv (recommended) or pip

git clone https://github.com/0x-Professor/CTF-time-mcp.git
cd ctf-times-mcp
uv sync

Using pip

git clone https://github.com/yourusername/ctf-times-mcp.git
cd ctf-times-mcp
pip install -e .

Usage

Running the Server

# Using uv
uv run server.py

# Using Python directly
python server.py

Development Mode

# Launch with MCP Inspector for testing
uv run mcp dev server.py

Client Configuration

To add the CTFtime MCP server to Claude Desktop, run this command:

uv run mcp install server.py --name "CTFtime"

Claude Desktop

Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "ctftime": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/ctf-times-mcp", "server.py"]
    }
  }
}

VS Code with Continue

Add to your Continue configuration:

{
  "mcpServers": [
    {
      "name": "ctftime",
      "command": "uv",
      "args": ["run", "server.py"],
      "cwd": "/path/to/ctf-times-mcp"
    }
  ]
}

Example Queries

Once connected to an MCP-compatible client:

  • "List upcoming CTF competitions for the next two weeks"

  • "Get details for CTF event ID 2345"

  • "Show the top 20 CTF teams globally"

  • "Find CTF teams from Germany"

  • "Search for CTF events related to DEF CON"

  • "Display the CTF calendar for March 2026"

API Reference

This server interfaces with the CTFtime.org API.

Endpoints Used

Endpoint

Purpose

/api/v1/events/

Event listing with date filters

/api/v1/events/{id}/

Individual event details

/api/v1/top/

Global team rankings

/api/v1/top/{year}/

Year-specific rankings

/api/v1/top-by-country/{code}/

Country-specific rankings

/api/v1/teams/{id}/

Team information

/api/v1/results/

Competition results

Rate Limiting

The CTFtime.org API is provided for data analysis and application development. Implement appropriate request throttling to respect server resources.

Competition Formats

Format

Description

Skill Level

Jeopardy

Category-based challenges (Web, Crypto, Pwn, Rev, Forensics)

All levels

Attack-Defense

Real-time offensive and defensive operations

Advanced

Mixed

Combination of Jeopardy and Attack-Defense

Intermediate+

Hack Quest

Narrative-driven progressive challenges

Learning

Challenge Categories

Category

Focus Area

Web

Web application security vulnerabilities

Crypto

Cryptographic analysis and exploitation

Pwn

Binary exploitation and memory corruption

Reverse

Static and dynamic binary analysis

Forensics

Digital artifact investigation

OSINT

Open source intelligence gathering

Misc

Programming, trivia, unconventional challenges

Project Structure

ctf-times-mcp/
├── server.py          # MCP server implementation
├── pyproject.toml     # Project configuration and dependencies
└── README.md          # Documentation

Development

Testing

# Run with MCP Inspector
uv run mcp dev server.py

# Execute tests
uv run pytest

Code Style

This project follows PEP 8 conventions with type annotations throughout.

Contributing

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/enhancement)

  3. Commit changes (git commit -m 'Add enhancement')

  4. Push to branch (git push origin feature/enhancement)

  5. Open a Pull Request

License

This project is licensed under the MIT License. See LICENSE for details.

Acknowledgments

Disclaimer

This is an independent project and is not affiliated with or endorsed by CTFtime.org. Please review and comply with CTFtime.org's terms of service and API usage guidelines.

Available Tools

9 tools
get_ctf_calendarB

Retrieve CTF events calendar for a specific month.

Args: month: Month number 1-12 (default: current month) year: Year (default: current year)

Returns: Calendar view of CTF events organized by date

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNo
yearNo

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. It states the tool retrieves a calendar view, implying a read-only operation, but doesn't disclose behavioral traits such as authentication requirements, rate limits, error handling, or whether the data is cached. For a tool with no annotation coverage, this leaves significant gaps in understanding its operational characteristics.

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 well-structured and concise, with zero wasted sentences. It front-loads the purpose, followed by clear sections for arguments and returns. Each sentence earns its place by providing essential information without redundancy, making it easy to parse 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 (2 optional parameters) and the presence of an output schema (which handles return values), the description is reasonably complete for basic use. However, with no annotations and incomplete parameter guidance (e.g., no mention of null defaults behavior), it lacks depth for more advanced scenarios, making it adequate but with 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 meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'month' is a number 1-12 with a default of current month, and 'year' has a default of current year—details not in the schema. With 2 parameters and low schema coverage, the description effectively compensates by clarifying usage and defaults, though it could note that null values trigger defaults.

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: 'Retrieve CTF events calendar for a specific month.' It specifies the verb ('retrieve') and resource ('CTF events calendar'), and distinguishes it from siblings like 'get_upcoming_ctfs' or 'search_events' by focusing on a calendar view for a specific month. However, it doesn't explicitly differentiate from 'get_past_ctfs' or 'get_event_details' beyond the calendar format.

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 mentions retrieving a calendar for a specific month, but doesn't clarify scenarios like 'use this for a monthly overview' versus 'use get_upcoming_ctfs for future events' or 'use search_events for filtering by criteria.' There's no mention of prerequisites, exclusions, or comparisons to sibling tools.

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

get_event_detailsA

Retrieve detailed information about a specific CTF event.

Args: event_id: The CTFtime event identifier

Returns: Comprehensive event details including format, weight, prizes, and participants

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/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 states the tool retrieves information (implying a read-only operation) and mentions the return includes comprehensive details like format and participants, which adds some context. However, it lacks critical behavioral details such as whether authentication is required, potential rate limits, error handling for invalid IDs, or if the data is real-time vs. cached, leaving significant gaps for an agent to understand operational constraints.

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, with a clear opening sentence stating the purpose, followed by brief but informative 'Args' and 'Returns' sections. Every sentence earns its place by adding value—no redundant or vague language—and it's front-loaded with the core functionality.

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 value documentation), the description is largely complete. It covers the purpose, parameter meaning, and return scope adequately. However, the lack of annotations means it could benefit from more behavioral context (e.g., auth needs), slightly reducing completeness for safe agent operation.

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 semantics beyond the input schema, which has 0% description coverage. It explains that 'event_id' is a 'CTFtime event identifier' and specifies it's required to retrieve details for a 'specific' event, clarifying the parameter's purpose and usage context. This compensates well for the schema's lack of descriptions, though it doesn't detail format constraints (e.g., numeric range).

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 with a specific verb ('Retrieve') and resource ('detailed information about a specific CTF event'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_event_results' or 'search_events', which might also retrieve event information but with different scopes or filters.

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 by specifying it's for retrieving details about a 'specific' event using an 'event_id', suggesting it should be used when you have a particular event in mind. However, it doesn't provide explicit guidance on when to choose this tool over alternatives like 'search_events' (for broader queries) or 'get_event_results' (for outcome-focused data), leaving some ambiguity.

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

get_event_resultsB

Retrieve CTF event results and scores.

Args: year: Specific year for results (default: all available)

Returns: Competition results with top teams and scores per event

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo

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?

With no annotations provided, the description carries full burden but offers minimal behavioral context. It mentions what data is returned (competition results with top teams and scores) but doesn't cover important aspects like authentication requirements, rate limits, error conditions, pagination, or whether this is a read-only operation. The description doesn't contradict annotations since none exist.

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 extremely concise and well-structured with clear sections for purpose, arguments, and returns. Every sentence earns its place, and the information is front-loaded with the core purpose stated first. The formatting with Args and Returns sections enhances readability.

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 has an output schema (which handles return value documentation) and only one parameter with 0% schema coverage, the description provides adequate basic information. However, for a tool with no annotations and multiple sibling tools that might overlap in functionality, more contextual guidance would be helpful to ensure proper tool selection.

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 0% schema description coverage and only one parameter, the description effectively compensates by explaining the year parameter's purpose and default behavior ('default: all available'). This adds meaningful context beyond what the bare schema provides, though it doesn't specify format constraints or valid year ranges.

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 with the verb 'retrieve' and resource 'CTF event results and scores'. It distinguishes itself from siblings like get_event_details (which likely provides detailed event information) and get_top_teams (which focuses on team rankings). However, it doesn't explicitly differentiate from get_past_ctfs which might overlap in scope.

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. With siblings like get_past_ctfs, get_top_teams, and search_events that might retrieve similar or overlapping data, there's no indication of when this specific results-retrieval tool is preferred. The only usage hint is the optional year parameter.

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

get_past_ctfsB

Retrieve past CTF events from CTFtime.org.

Args: limit: Maximum number of events to return (1-100, default: 10) days_back: Number of days to look back (default: 30)

Returns: Formatted list of past CTF events with details

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
days_backNo

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions retrieving past events but does not cover critical aspects like rate limits, authentication needs, error handling, or data freshness. This leaves significant gaps in understanding the tool's behavior.

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 front-loaded with the core purpose, followed by clear sections for arguments and returns. Every sentence adds value without redundancy, making it efficient and well-structured for quick comprehension.

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 has an output schema and simple parameters, the description covers the basics adequately. However, it lacks details on behavioral traits (e.g., rate limits) and usage context, which are important for a tool interacting with an external API like CTFtime.org.

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 semantics beyond the input schema by explaining what 'limit' and 'days_back' parameters do, including default values and ranges. Since schema description coverage is 0%, this compensates well, though it could be more detailed (e.g., explaining how 'days_back' is calculated).

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 verb ('Retrieve') and resource ('past CTF events from CTFtime.org'), making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'get_upcoming_ctfs' or 'search_events', which reduces it from 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?

No guidance is provided on when to use this tool versus alternatives such as 'get_upcoming_ctfs' for future events or 'search_events' for broader queries. The description lacks any context about usage scenarios or exclusions, leaving the agent without direction.

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

get_team_infoA

Retrieve detailed information about a specific CTF team.

Args: team_id: The CTFtime team identifier

Returns: Team details including rating history, country, and aliases

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/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 states this is a retrieval operation (implied read-only) and mentions the return data structure, but does not cover important aspects like error handling, rate limits, authentication requirements, or whether the data is cached/real-time. It adds some value but lacks comprehensive behavioral context.

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 efficiently structured with a clear purpose statement followed by Args and Returns sections. Every sentence earns its place by providing essential information without unnecessary elaboration. The front-loaded purpose statement immediately communicates the tool's function, making it highly scannable and zero-waste.

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 (single parameter read operation), the description provides adequate context: purpose, parameter meaning, and return data overview. With an output schema present (as indicated in context signals), the description appropriately doesn't need to detail return values. However, it could better address behavioral aspects like error cases or data freshness given the lack of annotations.

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 explicitly defines the single parameter 'team_id' as 'The CTFtime team identifier', adding crucial semantic meaning beyond the schema's basic type (integer). With 0% schema description coverage and only one parameter, this definition fully compensates for the schema gap, providing clear parameter context without redundancy.

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 'Retrieve' and the resource 'detailed information about a specific CTF team', making the purpose specific and unambiguous. It distinguishes this tool from siblings like get_top_teams (which lists multiple teams) or get_event_details (which focuses on events rather than teams), establishing clear differentiation.

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 when detailed team information is needed, but does not explicitly state when to use this tool versus alternatives like get_top_teams or search_events. No guidance is provided on prerequisites, exclusions, or specific contexts where this tool is preferred over others, leaving usage somewhat inferred rather than explicitly defined.

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

get_top_teamsA

Retrieve top-ranked CTF teams from CTFtime.org.

Args: year: Specific year for rankings (default: current year) limit: Maximum number of teams to return (1-100, default: 10)

Returns: Ranked list of top CTF teams with scores

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return format ('Ranked list of top CTF teams with scores') and default behaviors, but lacks details about rate limits, authentication needs, data freshness, or error conditions. It adequately describes the core operation but misses advanced behavioral context.

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 efficiently structured with a clear purpose statement followed by organized sections for Args and Returns. Each sentence adds value: the first sets context, the second explains parameters with constraints, and the third describes output. No wasted words, and information is front-loaded appropriately.

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 2 parameters with 0% schema coverage and an output schema present, the description is mostly complete. It fully documents parameter semantics and mentions the return format, though it could benefit from more behavioral context (e.g., rate limits). The output schema reduces the need to detail return values, making this reasonably comprehensive for its complexity.

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 description coverage is 0%, so the description must compensate fully. It successfully adds meaning beyond the bare schema by explaining both parameters: 'year' as 'Specific year for rankings (default: current year)' and 'limit' as 'Maximum number of teams to return (1-100, default: 10)'. This provides crucial context like range constraints and default values not in 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 the specific action ('Retrieve top-ranked CTF teams') and resource ('from CTFtime.org'), distinguishing it from siblings like get_team_info (individual team details) or get_top_teams_by_country (country-filtered rankings). The verb 'retrieve' is precise and the source is explicitly identified.

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 obtaining top team rankings, but provides no explicit guidance on when to use this versus alternatives like get_top_teams_by_country or get_team_info. It mentions the default year and limit, which hints at typical usage, but lacks clear when/when-not statements or sibling tool comparisons.

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

get_top_teams_by_countryA

Retrieve top CTF teams from a specific country.

Args: country_code: ISO 3166-1 alpha-2 country code (e.g., 'US', 'DE', 'CN') limit: Maximum number of teams to return (default: 10)

Returns: Ranked list of top teams from the specified country

ParametersJSON Schema
NameRequiredDescriptionDefault
country_codeYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 that the tool retrieves a 'ranked list' but does not specify ranking criteria (e.g., by points, wins), data freshness, rate limits, authentication needs, or error handling. For a tool with no annotation coverage, this leaves significant behavioral gaps.

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 efficiently structured with a clear purpose statement followed by labeled sections for Args and Returns. Each sentence adds value without redundancy, and the information is front-loaded, making it easy to parse quickly. No wasted words or unnecessary details are present.

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 (2 parameters, no annotations, but with an output schema), the description is reasonably complete. It covers the purpose, parameters, and return type adequately. However, it lacks details on behavioral aspects like ranking methodology or error conditions, which would enhance completeness despite the presence of an output schema.

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 meaningful semantics: 'country_code' is explained as an ISO 3166-1 alpha-2 code with examples ('US', 'DE', 'CN'), and 'limit' is clarified as the maximum number of teams with a default of 10. This provides essential context beyond the bare schema, though it doesn't cover all potential edge cases.

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 'Retrieve' and the resource 'top CTF teams from a specific country', making the purpose explicit. It distinguishes from sibling tools like 'get_top_teams' (which presumably lacks country filtering) and 'get_team_info' (which likely retrieves details for a specific team), establishing clear differentiation.

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 when needing top teams filtered by country, but does not explicitly state when to use this tool versus alternatives like 'get_top_teams' (without country filter) or 'get_team_info' (for specific team details). No exclusions or prerequisites are mentioned, leaving usage context somewhat inferred rather than clearly defined.

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

get_upcoming_ctfsB

Retrieve upcoming CTF events from CTFtime.org.

Args: limit: Maximum number of events to return (1-100, default: 10) days_ahead: Number of days to look ahead (default: 30)

Returns: Formatted list of upcoming CTF events with details

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
days_aheadNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/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. It mentions retrieving events and returns a formatted list, but fails to disclose critical behavioral traits like whether this is a read-only operation, potential rate limits, authentication needs, or error handling. For a tool with no annotations, this is a significant gap in transparency.

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, starting with the core purpose followed by clear sections for arguments and returns. Every sentence adds value without redundancy, making it efficient and easy 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 tool has an output schema (implied by 'Has output schema: true'), the description need not detail return values, and it adequately covers the purpose and parameters. However, with no annotations and multiple siblings, it could improve by adding more context on usage and behavioral aspects to be fully complete.

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 semantics beyond the input schema, which has 0% description coverage. It explains that 'limit' controls the maximum number of events (with a range of 1-100) and 'days_ahead' specifies how far to look into the future, including default values. This compensates well for the lack of schema descriptions.

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 verb 'Retrieve' and the resource 'upcoming CTF events from CTFtime.org', making the purpose specific and understandable. However, it does not explicitly distinguish this tool from its siblings like 'get_past_ctfs' or 'search_events', which would require mentioning time-based filtering or scope differences.

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. With siblings like 'get_past_ctfs', 'search_events', and 'get_ctf_calendar', it lacks explicit context such as 'use this for future events only' or comparisons to other tools, leaving usage unclear.

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

search_eventsB

Search for CTF events by name, description, or organizer.

Args: query: Search keywords limit: Maximum number of results (default: 20) include_past: Include past events in search (default: True) include_upcoming: Include upcoming events in search (default: True)

Returns: Matching CTF events sorted by relevance

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
include_pastNo
include_upcomingNo

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 the tool returns matching events sorted by relevance, which adds some context, but lacks details on permissions, rate limits, error handling, or what constitutes 'relevance'. For a search tool with zero annotation coverage, this is insufficient.

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 well-structured and front-loaded with a clear purpose statement, followed by organized sections for Args and Returns. Every sentence adds value without redundancy, making it efficient and easy to parse.

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 4 parameters with 0% schema coverage and no annotations, the description provides basic parameter info and mentions sorted relevance in returns, but an output schema exists, so return values needn't be detailed. However, for a search tool with siblings, more guidance on usage and behavioral traits would improve completeness.

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 lists all parameters with brief explanations (e.g., 'Search keywords' for query, defaults for limit and booleans), which adds meaning beyond the bare schema. However, it doesn't elaborate on parameter interactions or constraints, such as how the booleans affect results, leaving gaps.

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 searches for CTF events by specific criteria (name, description, or organizer), which is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'get_past_ctfs' or 'get_upcoming_ctfs' that might also retrieve events, though the search functionality is implied to be broader.

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 is provided on when to use this tool versus alternatives like 'get_past_ctfs' or 'get_upcoming_ctfs'. The description only states what the tool does, not when it's preferable over other tools, leaving the agent to infer usage context.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv1.0.0
    • First observedget_ctf_calendar
    • First observedget_event_details
    • First observedget_event_results
    • First observedget_past_ctfs
    • First observedget_team_info
    • First observedget_top_teams
    • First observedget_top_teams_by_country
    • First observedget_upcoming_ctfs
    • First observedsearch_events

TDQS

A3.7/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Each tool targets a specific aspect of CTF data (calendar, event details, results, past events, team info, top teams, top teams by country, upcoming events, search) with clear boundaries. The descriptions reinforce distinct use cases, making misselection unlikely.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_ctf_calendar, get_event_details, search_events). The naming is predictable and readable throughout, with 'get_' as the dominant verb prefix for retrieval operations and 'search_' for the search function, maintaining uniformity.

Tool Count5/5

With 9 tools, the count is well-scoped for a CTFtime server, covering key operations like event retrieval, team rankings, and search. Each tool earns its place by addressing a specific need in the domain, avoiding bloat while providing comprehensive coverage for typical agent workflows.

Completeness4/5

The tool set offers strong coverage for retrieving CTF events, results, and team information, with no dead ends. Minor gaps exist, such as the lack of tools for user-specific data (e.g., personal team participation) or administrative actions, but agents can work around these for core querying tasks.

Maintenance

ActivityInactive
ResponsivenessSyncing

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
    A
    quality
    C
    maintenance
    Enables interaction with CTFd platforms for Capture The Flag competitions, allowing users to list challenges, read details, manage dynamic Docker containers, and submit flags through natural language.
    5
    25
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to query CTF (Capture The Flag) cybersecurity competition data from CTFtime.org, including events, team rankings, results, and votes through the public CTFtime API.
    7
    46
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables searching and analyzing Devpost hackathons, winning projects, and tech stack trends for hackathon preparation.
    -
  • F
    license
    B
    quality
    D
    maintenance
    Provides programmatic access to all Scoring Engine API functionality for managing Red/White/Blue team cybersecurity competitions, including scoreboard, overview, team management, service management, injects, notifications, and admin tools.
    53
    -

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/0x-Professor/CTF-time-mcp'

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