indico-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| INDICO_TOKEN | No | API token for the instance (optional for public access) | |
| INDICO_DEFAULT | No | Default instance name (optional) | |
| INDICO_BASE_URL | No | Base URL of the Indico instance (single instance mode) | |
| INDICO_INSTANCES | No | Comma-separated list of instance names (e.g., cern,su) | |
| INDICO_ROOM_LOCATIONS | No | Comma-separated global room location names (optional) | |
| INDICO_ROOMS_CACHE_DIR | No | Override directory for room cache files (optional) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_instancesA | List configured Indico instances and the default instance name. Use this first if you are unsure which |
| search_categoriesA | Search for Indico categories by name. Returns matching categories with their ID, title, full breadcrumb path from the root, and event/subcategory counts. Use this to discover the category_id needed by other tools when you don't already know it (e.g. 'OKC Colloquia', 'HGTD Speakers Committee'). Returns up to 10 results. Refine the query if too many or too few results appear. |
| find_events_by_titleA | Search for events by title across the entire Indico instance. Each result includes category_id and category name, making this the most direct way to discover which category a meeting series belongs to when you know part of the event title but not the category ID. Example: searching 'AlbaNova ATLAS meeting' returns events whose category field reads 'Stockholm' with category_id=1384, immediately revealing where those meetings live so you can pass that ID to other tools. |
| browse_categoryA | List the direct subcategories of an Indico category, with event counts. Works by fetching a batch of recent events from the category and collecting the distinct (category_id, category_title) pairs from their metadata. This is the reliable fallback when the REST API is not available on an instance. Use this to navigate the category hierarchy: start at the root (0), pick a subcategory, call browse_category again on that ID, and so on until you find the right leaf category to pass to search_category_events or get_category_contributions. Note: subcategories with no events in the sampled batch may not appear. |
| get_category_contributionsA | Get contributions from ALL events in a category within an optional date range, in a single API call. Returns a flat list of contributions, each annotated with event_id, event_title, and event_start so you know which event each contribution belongs to. This is far more efficient than listing events and calling get_event_contributions for each one. Use it for: finding all talks by a speaker across a series of meetings, analysing themes across colloquia, counting talks matching a title pattern, or any aggregation over multiple events. The API caps results at 500 contributions per request. Use offset to paginate if needed. |
| search_category_eventsA | List events in an Indico category, optionally filtered by date range and keyword. Returns a list of events with id, title, type, start/end times, location, and URL. Use get_event_details or get_event_contributions to drill into a specific event. |
| get_event_detailsA | Get full metadata for an event, including its list of contributions. Returns event title, description, dates, location, and all contributions (with speakers, duration, abstract, session assignment). |
| get_event_contributionsA | List contributions for an event. Each contribution includes: title, speakers, authors, start time, duration, session, track, abstract/description, and room. Returns both |
| get_event_sessionsA | Get the session structure for an event, with each session's contributions nested inside. Useful for understanding how an event agenda is organised into parallel tracks or blocks. Each session includes: title, conveners, start/end time, room, and contributions list. |
| search_events_by_keywordA | Full-text search for events matching a keyword. Uses the Indico search API if available, otherwise falls back to the legacy title-search export endpoint. Returns matching events with id, title, category, dates, and URL. |
| list_category_infoA | Get metadata about an Indico category: name, description, and subcategory IDs. Useful for navigating the category hierarchy to find the right category_id before using search_category_events. |
| list_event_attachmentsA | List all file attachments and links for an event (or a specific contribution). Returns a flat list of attachments, each with: id, title, filename, content_type, size, download_url, and the folder/contribution/event context it belongs to. Use this to discover what files (slides, papers, minutes, etc.) are attached to an event or contribution before downloading them with download_attachment. Returns both |
| download_attachmentA | Download a file attachment from Indico and save it locally. Use list_event_attachments first to get the download_url for the file you want. Returns the local file path, filename, content type, and size. Files are saved to a temporary directory by default, or to a specified path. Maximum file size: 100 MB. IMPORTANT — data sensitivity: the file content will be read by the LLM if you
open or parse it after downloading. If list_event_attachments showed
|
| list_room_locationsA | List all room booking locations (sites) known for this Indico instance. Returns locations from the rooms cache (built by discover_rooms) if it exists, otherwise returns the locations configured via INDICO_*_ROOM_LOCATIONS. The location name is required by search_rooms, find_available_rooms, get_room_reservations, and book_room. When reading from the cache the response also includes 'cache_updated' (ISO date the cache was last refreshed) and 'cache_age_days' so the caller can decide whether to re-run discover_rooms. |
| discover_roomsA | Scan reservation history to build a room catalogue and save it locally. Fetches reservations across a broad time window (past 2 years + next 6 months) for each location to discover all rooms that have ever been booked, then saves the catalogue to ~/.indico_mcp/{instance}_rooms.json (override with INDICO_ROOMS_CACHE_DIR). After running this, search_rooms works without needing a location argument. If no locations are provided and none are configured, ask the user for the site/location names shown in the Indico room booking interface. |
| search_roomsA | Find rooms by name and return their numeric IDs. If a rooms cache exists (built by discover_rooms), searches it across all
locations without any API call. Falls back to scanning reservation history
live if no cache exists, in which case Each result includes the room id (needed by find_available_rooms and book_room), full_name, and location. Example: search_rooms("Xenon") finds all rooms with "Xenon" in the name across every cached location. |
| find_available_roomsA | List rooms that are NOT already booked in a given time window. Discovers known rooms from reservation history (past year + next 3 months), then checks which are booked in the requested window. Returns rooms with no conflict, each with its numeric id (needed for book_room) and full_name. Use name_filter to narrow to a specific room or building wing. Note: room discovery relies on past booking history. Rooms that have never been booked in the past year will not appear in the results even if they are free. If you believe a room is missing, try passing its name (or a fragment) via name_filter, which triggers an additional direct room-name lookup. |
| get_room_reservationsA | List all confirmed room reservations in a location within a time window. Each reservation includes: room name, start/end time, who it is booked for, and reason. Requires a token with the 'Classic API' (legacy_api) scope. |
| book_roomA | Create a room booking in Indico. Always confirm the full details with the user before calling this tool with dry_run=False, as the booking is created immediately and may be difficult to cancel. IMPORTANT CONSTRAINTS:
RETRY SAFETY: this endpoint is not idempotent. Submitting the same request twice (e.g. after a transient network error) will create two separate bookings. Use dry_run=True to pre-validate before committing, and do not retry automatically on failure. IMPERSONATION: the booked_for parameter allows booking on behalf of another user. Only use it when the user has explicitly authorised this action. Returns the booking confirmation from Indico, including the reservation ID if successful. When dry_run=True, returns the parameters that would have been sent without making any API call. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/cohm/indico-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server