Odybook MCP Server
OfficialClick on "Deploy 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., "@Odybook MCP ServerSearch for tours in Paris on 2025-06-15"
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.
Odybook Model Context Protocol (MCP) Server
A professional-grade implementation of the Model Context Protocol (MCP) for Odybook, enabling AI assistants to interact directly with Odybook's experience management platform. This server acts as a secure proxy, providing AI tools for tour searching, availability verification, and booking management.
Overview
The Odybook MCP server allows AI models (like Claude and ChatGPT) to perform real-time operations on the Odybook platform. It implements the standard MCP Toolkit, ensuring compatibility with any MCP-compliant client.
Features
Experience Search: Discover tours and activities by location and date.
Real-time Availability: Verify slot capacity for specific dates and guest counts.
Booking Management: Create temporary booking holds for customers.
Secure Integration: Uses Odybook Partner API authentication.
Related MCP server: MCP Server for Odoo
Prerequisites
Node.js 18.x or higher
An active Odybook Partner API Key
Odybook API URL (default:
https://odybook.com/api)
Installation
Clone the repository and navigate to the directory:
cd odybook-mcpInstall dependencies:
npm installBuild the project:
npm run build
Configuration
The server expects the following environment variables. You can define these in a .env file for development or pass them directly to the MCP client.
Variable | Description |
| (Optional) Your partner API key for protected routes like booking holds. |
| The Odybook API endpoint (default: |
Client Integration
Claude Desktop
Claude Desktop provides native support for MCP servers. To integrate Odybook:
Locate your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the following to the
mcpServersobject:
{
"mcpServers": {
"odybook": {
"command": "node",
"args": ["/absolute/path/to/odybook-mcp/dist/index.js"],
"env": {
"ODYBOOK_API_KEY": "YOUR_API_KEY_HERE",
"ODYBOOK_API_URL": "https://odybook.com/api"
}
}
}
}Restart Claude Desktop.
ChatGPT (Custom GPTs)
To use Odybook with ChatGPT, you can use the Odybook backend as a Custom Action.
Open Specification: Use the provided OpenAPI spec at
specs/openapi.json.Create Action: In your Custom GPT configuration, under "Actions", click "Create new action".
Import Schema: Paste the content of
specs/openapi.json.Authentication: Select "API Key" as the authentication type and "Bearer" as the auth scheme. Paste your
ODYBOOK_API_KEY.Test: ChatGPT will now be able to call Odybook tools via the
/api/mcpbridge.
Marketplace Submission
This server is designed to meet the requirements for official MCP registries:
Safety Annotations: All tools include clear descriptions and follow security best practices.
Vendor Neutrality: Implements the standard Model Context Protocol without proprietary extensions.
Portability: Verified to run on macOS and Windows via Node.js.
Submission Links
Tool Reference
search_tours
Search for experiences by location and date.
Arguments:
location(string, optional): City or country name.date(string, optional): Target date inYYYY-MM-DDformat.
check_availability
Verify if an experience has enough capacity for a given date.
Arguments:
experience_id(string): UUID of the experience.date(string): Date inYYYY-MM-DDformat.time(string, optional): Specific time slot (e.g., "10:00").pax(number): Number of guests.
create_booking_hold
Initiate a temporary booking hold.
Arguments:
experience_id(string): UUID of the experience.date(string): Target date.time(string): Specific time slot (e.g., "14:00").pax(number): Number of guests.customer_name(string): Customer's full name.customer_email(string): Customer's email address.
Development
Run the server in development mode with automatic reloading:
npm run devSecurity
This server does not store any customer data. All requests are proxied directly to the Odybook backend. Ensure your ODYBOOK_API_KEY is kept secure and never committed to version control.
Available Tools
3 toolscheck_availabilityA
Verify real-time availability and retrieve detailed pricing for a specific experience. This tool is public and does not require an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| pax | Yes | Number of guests/pax | |
| date | Yes | Target date in YYYY-MM-DD format | |
| time | No | Optional specific time slot (e.g., '10:00') | |
| experience_id | Yes | UUID of the experience |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses that the tool is public, requires no API key, and operates in real time, and 'verify/retrieve' implies a read-only operation. However, it does not explicitly confirm no side effects, rate limits, or response variability.
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?
Two efficient sentences with no fluff. The primary purpose is front-loaded, and the authentication note is appended as a concise secondary fact. Every word earns its place.
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?
For a read-only availability check with four well-documented parameters and no output schema, the description covers the key operational facts: what it does, real-time behavior, and authentication requirements. It does not detail the output shape, but 'retrieve detailed pricing' gives a reasonable hint.
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 100%, so the parameters are already fully documented. The description adds little beyond the schema: it mentions 'specific experience' but does not elaborate on date, pax, or optional time semantics. Baseline 3 applies.
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 uses a specific verb ('Verify') and resource ('real-time availability and retrieve detailed pricing for a specific experience'). It clearly distinguishes itself from siblings by emphasizing 'specific experience', which sets it apart from search_tours and aligns with a pre-booking check step.
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?
It states clear context: use this tool to check availability and pricing for an already-identified experience. The added note that it is public and requires no API key provides a definite usage condition. It does not explicitly contrast with siblings, but the intended scenario is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_booking_holdB
Initialize a temporary booking hold. Reserves capacity for a limited time. This tool requires a valid ODYBOOK_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| pax | Yes | Number of guests/pax | |
| date | Yes | Date in YYYY-MM-DD format | |
| time | Yes | Specific time slot (e.g., '14:00') | |
| customer_name | Yes | Customer full name | |
| experience_id | Yes | UUID of the experience | |
| customer_email | Yes | Customer email |
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 disclosing side effects. It does disclose that the hold is temporary and limited-time, and warns about the API key requirement. However, it does not explain what happens when the hold expires, whether it can be converted to a booking, or what the client should expect in the response.
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 three short sentences with no filler. The primary action is front-loaded, the key behavioral qualifier ('temporary', 'limited time') follows immediately, and the API key note is a necessary operational detail. Every sentence earns its place.
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?
For a mutation tool with no annotations and no output schema, the description leaves important context missing. It does not indicate what a successful hold returns, how long the hold lasts, or whether it affects availability queries. An agent can invoke the tool but lacks critical information about follow-up behavior and response handling.
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 100%, so the schema already documents all six parameters thoroughly. The description adds no parameter-specific meaning beyond what the schema provides. This is the appropriate baseline score when the schema handles parameter documentation.
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 starts with a specific verb and resource: 'Initialize a temporary booking hold.' It also clarifies the purpose by noting it 'Reserves capacity for a limited time,' which distinguishes it from sibling tools like search_tours and check_availability. The scope is immediately recognizable.
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 does not state when to use this tool instead of its siblings, nor does it mention prerequisites such as first checking availability. The only guideline is the API key requirement, which is a credential condition, not a usage decision. It leaves the agent to infer that a hold should follow an availability check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_toursA
Search for public tours and experiences by location and date. This tool is public and does not require an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Target date in YYYY-MM-DD format | |
| location | No | City or country name (e.g., 'Paris', 'Germany') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly states that the tool is public and does not require an API key, which addresses authentication expectations. The 'Search' wording implies read-only behavior, but it does not describe the return format or what happens when no filters are provided.
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 two short sentences with the core action front-loaded. Every sentence earns its place, and there is no redundant filler.
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?
The description is adequate for a simple search tool and covers public access and authentication. However, the schema marks both parameters as optional while the description says 'by location and date,' leaving ambiguity about calling with zero parameters. The absence of an output schema also means return behavior is left implicit.
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 100%, so the schema fully documents date and location. The description only restates that searches happen by location and date, adding no additional meaning about formats, defaults, or the optionality of the parameters.
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 uses a specific verb ('Search') with a clear resource ('public tours and experiences') and the two key filters (location and date). It is easily distinguishable from sibling tools like check_availability and create_booking_hold, which imply later workflow steps.
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 gives useful context: the tool is public and requires no API key. However, it does not explicitly say when to use this tool versus check_availability or create_booking_hold, nor does it mention that location and date are optional despite being the described search criteria.
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.
3 tool updates
v1.0.0- First observed
check_availability - First observed
create_booking_hold - First observed
search_tours
TDQS
Scored across 3 tools
search_tours finds experiences, check_availability retrieves pricing/availability for a specific one, and create_booking_hold reserves capacity. These form a clear sequential pipeline with no semantic overlap.
All three tools follow a consistent verb_noun snake_case pattern: search_, check_, create_. The naming style is uniform and predictable.
Three tools is a well-scoped minimal set covering the core pre-booking workflow. Each tool serves a distinct, necessary step and none are redundant.
The set covers search, availability, and booking hold but stops there. There are no tools to confirm, retrieve, or cancel a booking, leaving the booking lifecycle incomplete and agents unable to complete a booking.
Maintenance
Related MCP Connectors
Booking gateway for AI agents — discover events, movies & hotels, hand off to partner checkout.
AI ticket commerce for theme parks, zoos, museums, and aquariums via any AI agent
Travel tools for AI agents: plan and edit real trips, search stays and tours, import travel videos.
Give AI assistants access to real-time data. Search the web, compare flights, find hotels, and more.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to discover and search authentic Moroccan tourism experiences, cultural activities, and local operators through natural language queries with real-time data from verified sources.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business records like customers, products, and invoices across any Odoo instance.1Mozilla Public 2.0
- AlicenseAqualityFmaintenanceReal-time last-minute tour and activity booking across 18 suppliers in 15 countries via the OCTO open standard. Search available slots, create Stripe checkout sessions, and check booking status.41MIT

mcp-travelcodeofficial
AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search flights and hotels, manage bookings, check flight status, and access delay statistics through the TravelCode corporate travel API, all via natural language conversations.14 npm2MIT