Built for your agent, not for you.
Everything an AI agent needs to register an account, take payment, configure availability, and start booking on behalf of a human — minimal-human-in-the-loop. Humans get the dashboard; agents get this page.
Quick start
Connect via MCP
Hosted HTTP for browser-based clients (Claude.ai web, etc.) — OAuth handled automatically. Or stdio for Claude Desktop / Cursor / Continue.
Paste into any MCP client that supports remote servers. The client auto-discovers our OAuth server (RFC 8414) and walks the user through sign-in — no token to paste, no secrets to manage.
{
"mcpServers": {
"agent-cal": {
"url": "https://agent-calweb-production.up.railway.app/api/mcp"
}
}
}{
"mcpServers": {
"agent-cal": {
"command": "npx",
"args": [
"-y",
"@agent-cal/mcp"
],
"env": {
"AGENT_CAL_API_BASE_URL": "https://agent-calweb-production.up.railway.app"
}
}
}
}- OAuth (hosted HTTP only) — client auto-discovers via
/.well-known/oauth-authorization-server, drives the user through/oauth/authorize, exchanges code at/oauth/token. PKCE-only public clients, dynamic registration at/oauth/register. - Agent-driven OTP (both transports) — call
registerthenverify_emailtools. - Direct bearer — paste a 3-day token from the dashboard into the
Authorization: Bearerheader.
Discovery
Agent-discovery URLs
Machine-readable manifests an agent can fetch to learn the surface area without reading prose.
- Service manifestName, description, API base URL, MCP transports, auth options.https://agent-calweb-production.up.railway.app/.well-known/agent.json
- Tool manifestEvery MCP tool with name, description, and input schema.https://agent-calweb-production.up.railway.app/.well-known/tools.json
- OAuth authorization serverRFC 8414 — endpoints, supported grant types, PKCE methods.https://agent-calweb-production.up.railway.app/.well-known/oauth-authorization-server
- OAuth protected resourceTells MCP clients which authorization server protects /api/mcp.https://agent-calweb-production.up.railway.app/.well-known/oauth-protected-resource
Authentication
The agent-driven loop
No human terminal step required. The agent (or its MCP client) drives the OTP flow end-to-end.
- 1register
Tool call:
register({ email, agent: { name, id, version } }). Sends a 6-digit OTP to the email. Passname/id/versionidentifying yourself ("claude-code", a stable UUID, "1.2.3") so the host can attribute and rate-limit. Response:pending_verification. - 2(retrieve OTP)
Two paths: ask the human for the 6-digit code, OR if your MCP client has email connector access, fetch the latest message to that address and parse the code from the subject (we lead with it:
123456 is your agent-cal sign-in code). - 3verify_email
Tool call:
verify_email({ email, code }). Stores a 3-day bearer at~/.config/agent-cal/credentials.jsonand reportsverified. Auto-refreshes when < 12h remain. - 4update_profile (one-time)
Set username + timezone before
create_schedule. Username defaults to the email's local part on first verify, but you can override:update_profile({ username, timezone, name }).
Direct REST
If you'd rather skip MCP
Same data, raw HTTP. Bearer goes in the Authorization header (Bearer <token>).
- POST
/api/v1/auth/registerpublichttps://agent-calweb-production.up.railway.app/api/v1/auth/register - POST
/api/v1/auth/verifypublichttps://agent-calweb-production.up.railway.app/api/v1/auth/verify - GET
/api/v1/auth/mebearerhttps://agent-calweb-production.up.railway.app/api/v1/auth/me - POST
/api/v1/schedulesbearerhttps://agent-calweb-production.up.railway.app/api/v1/schedules - GET
/api/v1/schedulesbearerhttps://agent-calweb-production.up.railway.app/api/v1/schedules - POST
/api/v1/schedules/{id}/invitesbearerhttps://agent-calweb-production.up.railway.app/api/v1/schedules/{id}/invites - GET
/api/v1/public/{username}/{slug}/availabilitypublichttps://agent-calweb-production.up.railway.app/api/v1/public/{username}/{slug}/availability - POST
/api/v1/public/{username}/{slug}/bookpublichttps://agent-calweb-production.up.railway.app/api/v1/public/{username}/{slug}/book - POST
/api/v1/billing/checkoutbearerhttps://agent-calweb-production.up.railway.app/api/v1/billing/checkout
Tools
MCP tool surface
Hand-curated mirror of the runtime tools. Full input schemas live at /.well-known/tools.json.
Auth
registerStart registration — sends a 6-digit OTP.
verify_emailSubmit the OTP, mint a bearer.
whoamiRead back the current user + agent identity.
update_profileSet username / timezone / display name.
Calendars + meeting tools
connect_google_calendarReturns OAuth URL for human to grant access.
connect_microsoft_calendarSame for Outlook.
connect_zoomSame for Zoom.
list_calendarsList connected calendars + sync status.
list_meeting_toolsList connected meeting tools (Zoom).
disconnect_calendarRevoke a calendar connection.
disconnect_meeting_toolRevoke a meeting tool connection.
Schedules
create_scheduleCreate a booking link. Returns booking_url.
list_schedulesCaller's schedules.
get_scheduleFetch by id.
update_schedulePartial update.
pause_scheduleStop accepting new bookings.
activate_scheduleResume.
delete_scheduleSoft delete.
Invites
mint_inviteIssue a private invite token (plaintext + URL once).
list_invitesPrefixes only — no plaintext.
revoke_inviteRevoke an invite by id.
get_invite_eventsAudit log per invite.
Bookings (host)
list_bookingsHost's view.
get_bookingFetch by id.
Booker side
get_invite_availabilitySlots for an invite token (no bearer).
book_via_inviteConfirm a slot. Returns cancel_url + meeting_url.
Calendars + meetings
Connect Google, Outlook, Zoom
Bookings push real events. Bookers get a meeting URL in the confirmation email.
Free/busy + Google Meet links. One OAuth grant covers both.
Free/busy + Teams meeting links (work/school accounts).
Independent OAuth; per-booking Zoom meetings created via the Zoom API.
Connect from the dashboard, or programmatically: each provider has a connect_* MCP tool that returns a one-time OAuth URL the human visits. Once connected, schedules with location_type set to google_meet, microsoft_teams, or zoom generate fresh meeting URLs per booking.
Build agents, not glue.
Issues, ideas, weird agent behaviour: venkat@amzuit.com.