CTFtime MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CTFtime MCP ServerShow me upcoming CTF competitions for the next two weeks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Features
Tools
Tool | Description |
| Retrieve upcoming CTF events with configurable time range |
| Retrieve historical CTF events |
| Get comprehensive information about a specific event |
| Query global CTF team rankings |
| Query regional team rankings by country code |
| Retrieve detailed team information and statistics |
| Access competition results and scores |
| Search events by name, description, or organizer |
| View monthly calendar of CTF events |
Prompts
Prompt | Description |
| Generate analysis for a specific CTF event |
| Identify beginner-friendly competitions |
| Analyze team performance metrics |
| Generate weekly competition summary |
| Analyze regional CTF community |
Resources
Resource URI | Description |
| Server and platform documentation |
| CTF competition format reference |
| Challenge category documentation |
Related MCP server: mcp-ctftime
Installation
Prerequisites
Python 3.13 or higher
uv (recommended) or pip
Using uv (Recommended)
git clone https://github.com/0x-Professor/CTF-time-mcp.git
cd ctf-times-mcp
uv syncUsing 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.pyDevelopment Mode
# Launch with MCP Inspector for testing
uv run mcp dev server.pyClient 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 |
| Event listing with date filters |
| Individual event details |
| Global team rankings |
| Year-specific rankings |
| Country-specific rankings |
| Team information |
| 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 # DocumentationDevelopment
Testing
# Run with MCP Inspector
uv run mcp dev server.py
# Execute tests
uv run pytestCode Style
This project follows PEP 8 conventions with type annotations throughout.
Contributing
Fork the repository
Create a feature branch (
git checkout -b feature/enhancement)Commit changes (
git commit -m 'Add enhancement')Push to branch (
git push origin feature/enhancement)Open a Pull Request
License
This project is licensed under the MIT License. See LICENSE for details.
Acknowledgments
CTFtime.org - Competition tracking platform and API
Model Context Protocol - Protocol specification
MCP Python SDK - Server implementation framework
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 toolsget_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
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | ||
| year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| days_back | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| country_code | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| days_ahead | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| include_past | No | ||
| include_upcoming | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v1.0.0- First observed
get_ctf_calendar - First observed
get_event_details - First observed
get_event_results - First observed
get_past_ctfs - First observed
get_team_info - First observed
get_top_teams - First observed
get_top_teams_by_country - First observed
get_upcoming_ctfs - First observed
search_events
TDQS
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.
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.
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.
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
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
Breach intelligence API: email search, domain monitoring, passwords and stealer logs.
Run hackathons end to end: events, teams, submissions, judging and winners.
Real-time CVE, exploit, and vulnerability intelligence for AI assistants (350K+ CVEs, 115K+ PoCs)
Bypass Cloudflare API: A powerful scraping API designed to bypass Cloudflare protection.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables 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.525Apache 2.0
- AlicenseAqualityCmaintenanceEnables 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.746MIT
- FlicenseNot gradedqualityDmaintenanceEnables searching and analyzing Devpost hackathons, winning projects, and tech stack trends for hackathon preparation.-
- FlicenseBqualityDmaintenanceProvides 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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