For the complete documentation index, see llms.txt.

Give your AI agent the ability to book meetings

Vennio exposes 24 scheduling tools over MCP (Model Context Protocol). Connect once, and any MCP-compatible agent — Claude Desktop, Cursor, or your own Node.js agent — can check real availability and confirm bookings without you writing a custom integration layer.

Prerequisites

  1. A Vennio API key — get one at vennio.app/api-keys. You want a secret key (vennio_sk_live_*).
  2. A connected calendar — go to Settings in the Vennio app and connect your Google Calendar or Microsoft 365 account. The MCP tools operate on this calendar.

Connect your agent

Claude Desktop

Add Vennio to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "vennio": {
      "type": "http",
      "url": "https://api.vennio.app/mcp",
      "headers": {
        "Authorization": "Bearer vennio_sk_live_your_key_here"
      }
    }
  }
}

Restart Claude Desktop. The vennio tools will appear in the MCP tools panel. Ask Claude: "What's my schedule this week?" — it will call get_me and list_bookings automatically.

Cursor

Add the same block under mcpServers in your Cursor MCP config file (.cursor/mcp.json in your project, or the global config at ~/.cursor/mcp.json).

Node.js (programmatic)

npm install @modelcontextprotocol/sdk
import { Client } from '@modelcontextprotocol/sdk/client/index.js'
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'

const client = new Client({ name: 'my-agent', version: '1.0' })

await client.connect(
  new StreamableHTTPClientTransport(
    new URL('https://api.vennio.app/mcp'),
    { requestInit: { headers: { Authorization: `Bearer ${process.env.VENNIO_API_KEY}` } } }
  )
)

const { tools } = await client.listTools()
console.log(tools.map(t => t.name))
// → ['find_availability', 'find_mutual_availability', 'create_booking', ...]

Your first booking workflow

Here's what happens when a user tells your agent: "Schedule a 30-minute intro call with Alice this week."

Step 1 — Find an open slot

The agent calls find_availability with the business and a date range:

const availability = await client.callTool({
  name: 'find_availability',
  arguments: {
    business_id: 'YOUR_BUSINESS_UUID',
    duration_minutes: 30,
    from: '2026-04-21T00:00:00Z',
    to: '2026-04-25T23:59:59Z',
    timezone: 'Europe/London',
  },
})

Response:

{
  "business_id": "YOUR_BUSINESS_UUID",
  "duration_minutes": 30,
  "timezone": "Europe/London",
  "total_slots": 8,
  "slots": [
    { "start": "2026-04-21T09:00:00+01:00", "end": "2026-04-21T09:30:00+01:00" },
    { "start": "2026-04-21T11:00:00+01:00", "end": "2026-04-21T11:30:00+01:00" },
    { "start": "2026-04-22T14:00:00+01:00", "end": "2026-04-22T14:30:00+01:00" }
  ]
}

The agent picks a slot — or asks the user to pick one — and proceeds.

Step 2 — Confirm the booking

const booking = await client.callTool({
  name: 'create_booking',
  arguments: {
    business_id: 'YOUR_BUSINESS_UUID',
    customer_email: 'alice@example.com',
    customer_name: 'Alice Chen',
    start_time: '2026-04-21T09:00:00Z',
    end_time: '2026-04-21T09:30:00Z',
    notes: '30-minute intro call',
    agent_name: 'Scheduling Agent',
  },
})

Response:

{
  "booking_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "confirmed",
  "customer_name": "Alice Chen",
  "customer_email": "alice@example.com",
  "start_time": "2026-04-21T09:00:00Z",
  "end_time": "2026-04-21T09:30:00Z",
  "created_at": "2026-04-19T14:00:00Z"
}

Vennio creates the calendar event, sends confirmation emails to both parties, and fires any registered webhooks. The agent reports back: "Done — intro call with Alice confirmed for Monday 21 April at 9:00 AM."

The agent_name field is optional but recommended — it appears in the booking audit trail so you can see which agent made each booking.

What else your agent can do

Tool What it does
find_availability Open slots for a business, accounting for existing bookings and calendar events
find_mutual_availability Slots where 2–5 people are all free (requires consent grants)
create_booking Confirm a booking — creates calendar event, sends emails, fires webhooks
propose_meeting Send a meeting proposal with multiple time options; participants accept, counter, or reject
get_me Get the authenticated user's identity and connected calendar status
list_bookings List past and upcoming bookings with filtering
cancel_booking Cancel a confirmed booking
reschedule_booking Move a booking to a new time

See the full MCP integration reference for all 24 tools.

Next steps