loading…
Search for a command to run...
loading…
The OnceHub MCP Server provides a standardized way for AI models and agents to interact directly with the OnceHub scheduling API
The OnceHub MCP Server provides a standardized way for AI models and agents to interact directly with the OnceHub scheduling API
Python 3.13+ License: MIT Code Coverage MCP Compatible
The OnceHub MCP Server provides a standardized way for AI models and agents to interact directly with your OnceHub scheduling API. Rather than sending users a booking link and asking them to schedule manually, an AI Agent can retrieve availability and schedule meetings on the user’s behalf using MCP tools, through a natural language flow.
This solution enables external AI Agents to access OnceHub scheduling APIs within AI-driven workflows using the standardized Model Context Protocol (MCP) remote server.
Compatible with: VS Code Copilot, OpenAI, and any MCP-compatible AI client.
Get started with the OnceHub MCP Server in your AI client:
Obtain your OnceHub API key from the Authentication documentation.
Create .vscode/mcp.json in your workspace:
{
"servers": {
"oncehub": {
"url": "https://mcp.oncehub.com/sse",
"type": "http",
"headers": {
"authorization": "Bearer YOUR_ONCEHUB_API_KEY"
}
}
}
}
Replace YOUR_ONCEHUB_API_KEY with your actual API key.
Ask your AI assistant to:
⚠️ Running your own MCP server? See Installation & Running Locally for setup instructions.
✅ Production Server: Our hosted MCP server is available at https://mcp.oncehub.com/sse.

mcp-server/
├── main.py # MCP server with tool definitions
├── models.py # Pydantic data schemas for BookingForm and Location
├── pyproject.toml # Project dependencies and configuration
├── Dockerfile # Docker image configuration
├── .dockerignore # Files to exclude from Docker build
└── README.md # This file
get_booking_time_slotsRetrieves available time slots from a booking calendar.
Parameters:
calendar_id (str, required): The booking calendar ID (e.g., 'BKC-XXXXXXXXXX')start_time (str, optional): Filter slots from this datetime in ISO 8601 format (e.g., '2026-02-15T09:00:00Z')end_time (str, optional): Filter slots until this datetime in ISO 8601 format (e.g., '2026-02-28T17:00:00Z')timeout (int, default: 30): Request timeout in secondsExample Response:
{
"success": true,
"status_code": 200,
"calendar_id": "BKC-XXXXXXXXXX",
"total_slots": 5,
"data": [
{"start_time": "2026-02-10T10:00:00Z", "end_time": "2026-02-10T11:00:00Z"},
{"start_time": "2026-02-10T14:00:00Z", "end_time": "2026-02-10T15:00:00Z"}
]
}
schedule_meetingSchedules a meeting in a specified time slot. Always call get_booking_time_slots first to ensure the time slot is available.
Parameters:
calendar_id (str, required): ID of the booking calendar (e.g., 'BKC-XXXXXXXXXX')start_time (str, required): The exact start time from an available slot in ISO 8601 formatguest_time_zone (str, required): Guest's timezone in IANA format (e.g., 'America/New_York', 'Europe/London')guest_name (str, required): Guest's full nameguest_email (str, required): Guest's email address for confirmationguest_phone (str, optional): Guest's phone number in E.164 format (e.g., '+15551234567')location_type (str, optional): Meeting mode - 'virtual', 'virtual_static', 'physical', or 'guest_phone'location_value (str, optional): Location details based on type:virtual: Provider name (e.g., 'zoom', 'google_meet', 'microsoft_teams')virtual_static: Use nullphysical: Address ID (e.g., 'ADD-XXXXXXXXXX')guest_phone: Phone number in E.164 formatcustom_fields (dict, optional): Custom form fields as key-value pairs (e.g., {"company": "Acme", "interests": ["Demo"]})timeout (int, default: 30): Request timeout in secondsExample Response:
{
"success": true,
"status_code": 200,
"booking_id": "BKG-123456789",
"confirmation": {
"guest_name": "John Doe",
"guest_email": "[email protected]",
"scheduled_time": "2026-02-10T10:00:00Z",
"timezone": "America/New_York"
}
}
https://api.oncehub.com)Create a .env file or set these environment variables:
# Required: Your OnceHub API endpoint
ONCEHUB_API_URL=https://api.oncehub.com
# Note: API key is passed via Authorization header from MCP clients
# Do NOT commit API keys to version control
This MCP server is compatible with VS Code Copilot, Claude Desktop, OpenAI, and other MCP-compatible clients.
Windows (PowerShell):
New-Item -Path ".vscode" -ItemType Directory -Force
New-Item -Path ".vscode\mcp.json" -ItemType File -Force
macOS/Linux:
mkdir -p .vscode
touch .vscode/mcp.json
Edit .vscode/mcp.json:
{
"servers": {
"oncehub": {
"url": "http://0.0.0.0:8000/sse",
"type": "http",
"headers": {
"authorization": "Bearer YOUR_ONCEHUB_API_KEY"
}
}
}
}
Configuration Options:
url: The MCP server endpoint (change to your server URL if self-hosting)authorization: Your OnceHub API key with Bearer prefixoncehub): Can be customized to any identifierAfter saving the configuration, reload VS Code to activate the MCP server connection.
Edit your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"oncehub": {
"url": "http://0.0.0.0:8000/sse",
"headers": {
"authorization": "Bearer YOUR_ONCEHUB_API_KEY"
}
}
}
}
Restart Claude Desktop after saving.
For other MCP-compatible clients, configure them to connect to:
http://0.0.0.0:8000/sseAuthorization headerSecurity Note: Never commit API keys to version control. Use environment variables or secure secret management for production deployments.
Windows (PowerShell):
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/scheduleonce/mcp-server.git
cd mcp-server
Windows (PowerShell):
$env:ONCEHUB_API_URL="https://api.oncehub.com"
macOS/Linux:
export ONCEHUB_API_URL="https://api.oncehub.com"
Or create a .env file:
echo "ONCEHUB_API_URL=https://api.oncehub.com" > .env
Note: The API key is passed via the
Authorizationheader from MCP clients (not as an environment variable).
Option 1: Direct execution
uv run main.py
Option 2: Using the script entry point
uv run mcp-server
The server will start on http://0.0.0.0:8000
Health check:
curl http://localhost:8000/health
Connect to SSE endpoint:
curl http://localhost:8000/sse
docker build -t mcp-server .
docker run -p 8000:8000 mcp-server
docker run -p 8000:8000 \
-e ONCEHUB_API_URL="https://api.oncehub.com" \
mcp-server
Create docker-compose.yml:
version: '3.8'
services:
mcp-server:
build: .
ports:
- "8000:8000"
environment:
- ONCEHUB_API_URL=https://api.oncehub.com
restart: unless-stopped
Then run:
docker-compose up -d
LocationRepresents meeting location details.
Fields:
type (str): Location type ("physical", "virtual", "phone")value (str): Location details (address, URL, phone number)The server includes comprehensive logging for HTTP requests to OnceHub:
Logs are output to the console with timestamps and log levels.
GET /health - Health check endpointGET /healthy - Alternate health check endpointGET /sse - Server-Sent Events endpoint for MCP protocol communicationGET /tools - Returns the registered MCP tools with their descriptions, required parameters, and input field detailsuv pip install fastmcp pydantic httpx
uv pip install -e ".[test]"
Edit main.py and change log_level parameter:
asyncio.run(mcp.run_sse_async(host="0.0.0.0", port=8000, log_level="debug"))
Available log levels: "debug", "info", "warning", "error", "critical"
The project includes comprehensive unit tests for all tools and functions.
# Install test dependencies
uv pip install pytest pytest-asyncio pytest-cov pytest-mock
Run all tests:
uv run pytest
Run tests with coverage report:
uv run pytest --cov=. --cov-report=html --cov-report=term
Run specific test file:
uv run pytest test_tools.py
Run specific test class:
uv run pytest test_tools.py::TestGetBookingTimeSlots
Run specific test:
uv run pytest test_tools.py::TestGetBookingTimeSlots::test_get_time_slots_success
Run with verbose output:
uv run pytest -v
Run and stop on first failure:
uv run pytest -x
After running tests with coverage, open the HTML report:
# Windows
start htmlcov/index.html
# macOS
open htmlcov/index.html
# Linux
xdg-open htmlcov/index.html
test_tools.py - Unit tests for all tool functionsTestGetApiKeyFromContext - Tests for API key extractionTestGetBookingTimeSlots - Tests for time slot retrievalTestScheduleMeeting - Tests for meeting schedulingAll tests use mocking to avoid actual API calls and ensure fast, reliable test execution.
API Key Management
Network Security
Monitoring
/health endpoint for availability# Build and tag the image
docker build -t oncehub-mcp-server:1.0.0 .
# Run with restart policy
docker run -d \
--name oncehub-mcp \
--restart unless-stopped \
-p 8000:8000 \
-e ONCEHUB_API_URL="https://api.oncehub.com" \
oncehub-mcp-server:1.0.0
# Simple health check script
curl -f http://localhost:8000/health || exit 1
# Docker healthcheck (add to Dockerfile)
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
Ensure you're passing the api_key parameter when calling the tools.
/healthMake sure the server is running and accessible on port 8000.
/sseThe SSE endpoint requires a GET request, not POST. Use proper MCP client libraries or curl with GET.
Check that logging is properly configured in main.py and the server is running with log_level="info" or "debug".
This project is licensed under the terms of the MIT open source license. Please refer to MIT for the full terms.
Made by the Oncehub team
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"oncehub": {
"command": "npx",
"args": []
}
}
}Web content fetching and conversion for efficient LLM usage.
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also