Skip to main content
Glama
Odybook

Odybook MCP Server

Official
by Odybook

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

  1. Clone the repository and navigate to the directory:

    cd odybook-mcp
  2. Install dependencies:

    npm install
  3. Build 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

ODYBOOK_API_KEY

(Optional) Your partner API key for protected routes like booking holds.

ODYBOOK_API_URL

The Odybook API endpoint (default: https://odybook.com/api).

Client Integration

Claude Desktop

Claude Desktop provides native support for MCP servers. To integrate Odybook:

  1. Locate your Claude Desktop configuration file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. Add the following to the mcpServers object:

{
  "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"
      }
    }
  }
}
  1. Restart Claude Desktop.

ChatGPT (Custom GPTs)

To use Odybook with ChatGPT, you can use the Odybook backend as a Custom Action.

  1. Open Specification: Use the provided OpenAPI spec at specs/openapi.json.

  2. Create Action: In your Custom GPT configuration, under "Actions", click "Create new action".

  3. Import Schema: Paste the content of specs/openapi.json.

  4. Authentication: Select "API Key" as the authentication type and "Bearer" as the auth scheme. Paste your ODYBOOK_API_KEY.

  5. Test: ChatGPT will now be able to call Odybook tools via the /api/mcp bridge.

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.

Tool Reference

search_tours

Search for experiences by location and date.

  • Arguments:

    • location (string, optional): City or country name.

    • date (string, optional): Target date in YYYY-MM-DD format.

check_availability

Verify if an experience has enough capacity for a given date.

  • Arguments:

    • experience_id (string): UUID of the experience.

    • date (string): Date in YYYY-MM-DD format.

    • 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 dev

Security

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 tools
check_availabilityA

Verify real-time availability and retrieve detailed pricing for a specific experience. This tool is public and does not require an API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
paxYesNumber of guests/pax
dateYesTarget date in YYYY-MM-DD format
timeNoOptional specific time slot (e.g., '10:00')
experience_idYesUUID of the experience

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paxYesNumber of guests/pax
dateYesDate in YYYY-MM-DD format
timeYesSpecific time slot (e.g., '14:00')
customer_nameYesCustomer full name
experience_idYesUUID of the experience
customer_emailYesCustomer email

TDQS

B3.4/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 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoTarget date in YYYY-MM-DD format
locationNoCity or country name (e.g., 'Paris', 'Germany')

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv1.0.0
    • First observedcheck_availability
    • First observedcreate_booking_hold
    • First observedsearch_tours

TDQS

A3.8/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency5/5

All three tools follow a consistent verb_noun snake_case pattern: search_, check_, create_. The naming style is uniform and predictable.

Tool Count5/5

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.

Completeness2/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    1
    Mozilla Public 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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 npm
    2
    MIT