findtime.io
MCP Docs for Apps, IDEs, and Agents
Install the published @findtime/mcp-server MCP server in Cursor, Codex, or Claude and call the same production-backed time intelligence surface that powers the Time API and findtime.io. A remote client can connect to https://mcp.findtime.io/mcp with OAuth 2.1 and PKCE. The local package still uses a developer API key.
This page covers installation, verification, and troubleshooting for Cursor, Codex, and Claude, plus the current MCP tool surface and recommended smoke tests.
Production parity
The MCP server proxies time-api.findtime.io directly so apps and agents stay on one truth surface.
Published install path
Use npx -y @findtime/mcp-server in client config. A repo checkout is not required.
Agent-native tools
The tool surface includes a natural-language time question tool plus current time, DST, conversion, overlap, meeting finding, and deterministic location search.
Debuggable
We document the config files, exact prompts, and startup logs that mattered when things failed.
Install and verify your first call
Select your client below. The config snippet, verification prompt, and troubleshooting guidance update with the selected platform.
- For the local package, create a developer key first from
/developers/keys/. - Hosted clients can sign in with OAuth instead, and can still send an
ftk_live_key as a bearer token. - You usually do not need to run a terminal command during setup. The MCP client runs
npx -y @findtime/mcp-serverfor you after you save the config and restart the client. - Install Node 20 or newer first. The MCP client must be able to find
npxin its process environment. - Allow network access to npm for the first package install and to
time-api.findtime.iofor tool calls. - Replace
YOUR_FINDTIME_SECRET_KEYin the config with your developer key. Keep that key in the client environment. Do not put it in prompts or public repositories. - Use
npx -y @findtime/mcp-serverin the MCP config. A repo checkout is not required. - The package is published on npm and listed in the Official MCP Registry at
io.github.hkchao/findtime-mcp-server. - Point the server at
https://time-api.findtime.ioor omit the base URL to use the default. - After changing MCP config, fully restart the client before testing again.
Active file
~/.cursor/mcp.jsonCursorHosted: add the url snippet to ~/.cursor/mcp.json for all projects, or .cursor/mcp.json for one project. You can also add it in Cursor's MCP settings. Local npx uses the same files with a command and API key.
Hosted (sign in with Google)
Add this to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). You can also add it in Cursor's settings under MCP.
{
"mcpServers": {
"findtime": {
"url": "https://mcp.findtime.io/mcp"
}
}
}- Save the file (or add the same url in Cursor's MCP settings).
- Connect and sign in with Google in the browser. Cursor then returns you to the app. If it asks for permission, say yes.
- In chat, ask: "Use the findtime tool answer_time_question: what is the IANA timezone for San Francisco?" You should get
America/Los_Angeles. - Booking from Cursor isn't ready yet. Use Claude to request or manage bookings.
- If the server does not start, open Output (
Cmd+Shift+U), then MCP Logs.
Local package (npx + API key)
{
"mcpServers": {
"findtime": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@findtime/mcp-server"],
"env": {
"FINDTIME_MCP_CLIENT_TYPE": "cursor",
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io",
"FINDTIME_TIME_API_KEY": "YOUR_FINDTIME_SECRET_KEY"
}
}
}
}- Confirm which Cursor config is active. If you already have a global MCP config, Cursor may be reading `~/.cursor/mcp.json` instead of a repo-local `.cursor/mcp.json`.
- Use `npx` so Cursor installs and runs `@findtime/mcp-server` directly. A repo checkout is not required.
- Keep Cursor Settings open with the Output pane visible before reconnecting so you can watch the MCP startup logs in real time.
- After saving the config, reload Cursor so it recreates the stdio process with the new values.
Confirm the first answer
Use the findtime.io MCP tool answer_time_question for "what is the IANA timezone for San Francisco?"
Open the client's tool-call details. Confirm that it called answer_time_question through the findtime server. The result for San Francisco must identify America/Los_Angeles. An answer without an MCP tool call does not verify the installation.
For the local npm package, if the call fails, run get_api_diagnostics and inspect the active API URL, authentication state, and health result. On the hosted connector, retry or reconnect, then call get_findtime_help. Use the troubleshooting table before trying additional prompts.
Hosted MCP
Time and meeting-planning tools are available through the local package and the hosted connector. The hosted connector also supports booking tools. Local setup diagnostics are available only in the npm package.
- Local package.
@findtime/mcp-serverover stdio. Auth is a developer API key inFINDTIME_TIME_API_KEY. - Hosted server. Streamable HTTP
POST https://mcp.findtime.io/mcp. Primary auth is OAuth 2.1 authorization code with PKCE S256. Secondary auth isAuthorization: Bearerplus an existing developer key that starts withftk_live_. That bearer key is granted scopestime:readandmeetings:plan.
Sign in with Google when the client opens the authorization URL. The host creates a connector developer key for that Google account. It does not reveal or replay older key secrets. For a key you create yourself, open /developers/keys/.
- Protected resource metadata.
GET https://mcp.findtime.io/.well-known/oauth-protected-resource - Authorization server metadata.
GET https://mcp.findtime.io/.well-known/oauth-authorization-server - Dynamic client registration.
POST https://mcp.findtime.io/oauth/register - Authorize.
GET https://mcp.findtime.io/oauth/authorize. This call requiresresponse_type=codeandcode_challenge_method=S256. - Token.
POST https://mcp.findtime.io/oauth/token. Grant types areauthorization_codeandrefresh_token. Client auth isclient_secret_postorclient_secret_basic. - Liveness.
GET https://mcp.findtime.io/health
time:readcovers time, timezone, DST, conversion, location, and help tools. The hosted connector does not exposeget_api_diagnostics.meetings:plancoversfind_meeting_time,get_overlap_hours,save_team,rename_teamanddelete_team.check_proposed_time,are_they_awake,rank_recurring_slot,list_teamsandget_teamneedtime:read.booking:requestcoversrequest_bookingandreschedule_booking.booking:hostcovers the host tools. Custom clients request those scopes by name. See Booking tools.- Every
POST /mcprequest requires a token or an API key, includinginitializeandtools/list. An unauthenticated request gets 401 with aWWW-Authenticateheader that points to the protected resource metadata, so clients start OAuth when they connect. - Access tokens expire after 1 hour. Refresh tokens expire after 30 days.
- The Time API base stays
https://time-api.findtime.io.
Parity with findtime.io API
The MCP server is a thin adapter over the production Time API. Current time, DST, conversion, overlap, meeting search, and location resolution should return the same answers through MCP and the API for the same inputs.
- MCP results should match the live API for the same inputs.
- A working installation should call the MCP tool directly.
- If MCP startup fails, fix the client configuration before trusting any fallback output.
Behavior and retry rules
MCP returns the API payload plus a small amount of adapter metadata so agents can retry deterministically instead of guessing.
search_timezonestreatscountryCodeas a ranking hint. When you supply a hint, the MCP result includesprimaryMatchandcountryFilteredResultsso agents do not assume every returned row matches the hint.answer_time_questionis the preferred default for natural-language agent prompts, especially messy prompts with relative dates such astomorrow,next Friday,Tuesday, orthis weekend. If the caller already has structured parameters and knows the intent, the narrower tools are still available.convert_timeaccepts explicit ISO dates and simple human day words in thetimefield, such as3pm Tuesdayor3pm thur. Scheduling tools such asget_overlap_hoursandfind_meeting_timeaccept simple human values indate, such asThursday,tomorrow, ornext Friday, resolved relative to the first location timezone.get_current_timeis best with a city, exact timezone, or a location resolved fromsearch_timezones. Exact country-name inputs now resolve directly for single-zone countries and return explicit ambiguity for countries with multiple timezones.- Abbreviations such as
ISTare often ambiguous. Usesearch_timezonesfirst or pair the query with a region or country when you need one deterministic answer. - MCP tool errors keep a consistent shape: HTTP status, request URL, and the parsed API error body are included in the structured result so the client can surface the exact failure.
Per-call end-user attribution
Multi-user MCP hosts such as Slack, Discord, Teams, and internal company bots can run one long-lived @findtime/mcp-server process while still attributing each Time API call to the end-user who triggered it.
- Add optional
_endUserIdmetadata inside the MCP tool callargumentsobject. - The MCP server strips
_endUserIdfrom the tool parameters and forwards it only asX-Findtime-End-User-IDtotime-api.findtime.io. - Missing,
null, or empty values are treated as absent, so existing single-user installs keep the same install-level attribution behavior. - The value must be a string, at most 256 characters, and cannot contain control characters such as carriage returns or newlines.
_endUserId should be an opaque, non-PII token generated by the host, typically a SHA-256 hash of the platform user ID truncated to 16-32 hex characters. Do not send raw emails, names, Slack IDs, Discord IDs, Teams IDs, or other personally identifiable values.await client.callTool({
name: "get_current_time",
arguments: {
city: "Tokyo",
_endUserId: "a3f2c1d4e5b6c7d8"
}
});Testing and smoke prompts
Use these prompts to verify that the client is making native MCP tool calls. If the client searches the repo or runs local Node code instead, treat that as fallback behavior and continue debugging the MCP setup.
Use the findtime.io MCP tool ... phrasing during setup so you can confirm the client is calling the MCP server directly. After that succeeds, switch back to normal natural-language prompts.Use the findtime.io MCP tool answer_time_question for "what is the IANA timezone for San Francisco?"
Use the findtime.io MCP tool answer_time_question for "what is the IANA timezone for San Francisco?" Use the findtime.io MCP tool answer_time_question for "3pm PST to London". Use the findtime.io MCP tool answer_time_question for "convert 3pm next Tuesday in New York to London and Tokyo". Use the findtime.io MCP tool get_current_time for city "Tokyo" with countryCode "JP". Use the findtime.io MCP tool search_timezones for "Victoria" with countryCode "CA". Use the findtime.io MCP tool get_dst_schedule for timezone "America/New_York". Use the findtime.io MCP tool get_dst_schedule for timezone "Europe/London" with year 2026. Use the findtime.io MCP tool get_dst_schedule for timezone "Europe/London" with at "2025-03-22T12:00:00Z". Use the findtime.io MCP tool convert_time from "New York" to ["London","Tokyo"] at time "9:00 AM" on date "2026-03-10". Use the findtime.io MCP tool find_meeting_time for locations ["Tokyo","Cairo","New York"] with countryCodes ["JP","EG","US"] on date "2026-03-10".
For the local npm package only, also call get_api_diagnostics to check installation and authentication details. This tool is not available on the hosted connector.
Once installation succeeds, use answer_time_question with these natural-language questions. The CST question asks for clarification because the abbreviation has multiple meanings.
what time is it in London? 9am New York to Berlin does London observe DST? working hours overlap for New York and London best time for a meeting between San Francisco and London what does CST mean?
- Start with an explicit tool-call prompt such as
Use the findtime.io MCP tool answer_time_question for "what is the IANA timezone for San Francisco?" - Once that works, try the natural-language questions above with
answer_time_question. - Cursor: the Output pane should show a successful stdio connection and the chat should call a
findtimeMCP tool. - Codex and Claude: the chat should call the MCP tool directly and should not fall back to repo search or local Node execution.
Troubleshooting
Use this section to diagnose startup failures, missing tools, auth errors, and false-positive fallback behavior.
- Editing the wrong config file. Each client has its own MCP config source.
- Leaving an old MCP server path in the config after moving the implementation to a new repo location.
- Forgetting to provide a developer API key in the MCP client env.
- Counting a local fallback execution as proof that MCP was working.
- Restarting only the thread instead of the full client after changing MCP config.
| Symptom | Likely cause | What to do |
|---|---|---|
| Startup timeout in Cursor | Stale config, first-run install issue, or the wrong command | Open Output, verify the command is npx -y @findtime/mcp-server, then reload Cursor after fixing the config. |
initialize response failure in Codex | Outdated MCP transport behavior or stale app process | Update to the latest server code and fully quit and relaunch Codex. |
| Tool call returns 401 | Missing or wrong API key | Set FINDTIME_TIME_API_KEY to a live developer key. |
Hosted /mcp returns 401 | No OAuth token and no ftk_live_ bearer key | Sign in with OAuth 2.1 and PKCE, or send Authorization: Bearer with a developer key that starts with ftk_live_. |
The client cannot find npx | Node is missing or the desktop client has a different process environment | Install Node 20 or newer. Configure the client to use the actual path to npx if needed, then fully restart it. |
| Tool call returns 429 | The Time API reports a rate limit or quota failure | Inspect the returned API error before retrying. The Time API enforces the configured per-key rate limits and quotas. Avoid immediate repeated calls. |
| The model searched the repo and ran local JS | MCP was still unavailable | Treat that as fallback behavior, not success. Fix MCP first, then retry with a fresh thread. |
| Behavior seems stale even though MCP is connected | The client may still be running an older MCP package, or the latest version lookup may have failed | For the local npm package, run get_api_diagnostics. On the hosted connector, reconnect and call get_findtime_help. For local diagnostics, check mcpInstallMode first, then compare mcpVersion and mcpLatestVersion. If the latest check fails, follow the returned npm or Official MCP Registry links to verify the newest published version manually. |
2026-03-21 14:33:22.064 [info] Starting new stdio process with command: npx -y @findtime/mcp-server 2026-03-21 14:33:22.123 [info] Successfully connected to stdio server 2026-03-21 14:33:22.123 [info] Storing stdio client: user-findtime 2026-03-21 14:33:22.123 [info] CreateClient completed, server stored: true
- Editing the wrong file is the #1 trap. Verify whether Cursor is using the global config or a repo-local config.
- If the Output pane shows a timeout during startup, check that the command is `npx -y @findtime/mcp-server` and that Cursor reloaded after the edit.
- If the server connects but tool calls return 401, the missing piece is usually `FINDTIME_TIME_API_KEY`.
MCP tool surface
These tools are available through the findtime MCP server. Use them directly from your client once setup is complete.
| Tool | Parameters | Best for | Why it matters |
|---|---|---|---|
answer_time_question | Required queryOptional userTimezonelocalenowdate | Natural-language time questions | Preferred default for natural-language agent prompts, especially when the user says "tomorrow", "next Friday", "Tuesday", "this weekend", or another relative date. Classifies current time, conversion, DST, overlap, meeting, abbreviation, and IANA timezone questions and returns structured clarification when input is ambiguous. |
time_snapshot | Required query or locationsOptional countryCode or countryCodesincludeTransitions | One-call time intelligence | Best default tool when you want packaged location, timezone, current time, DST, and optional transitions. Batch calls can return per-location status with retry-friendly suggestedQuery and suggestedId values instead of failing all at once. |
get_current_time | Required city or queryOptional countryCode | Single-location time lookups | Fastest current-time check when you already know the city or timezone you want and there is no natural-language date qualifier. Exact country-name queries resolve directly for single-zone countries and return explicit ambiguity for multi-zone countries. |
get_api_diagnostics | none | Local npm version and environment debugging | Available only in the local npm package, not the hosted connector. Confirms the running MCP version, reports whether the client is using a repo checkout or npm package install, checks the latest published MCP version when available, and returns the active API base URL, auth state, and health result. |
get_dst_schedule | Required city, query, or timezoneOptional countryCodeatyear | DST truth | Use this when the question is specifically about DST status, last transition, next transition, or a calendar-year view and the date context is already structured. Route relative-date prompts through answer_time_question first. |
convert_time | Required fromtotimedateOptional fromCountryCodetoCountryCodes | One-to-many conversion | Convert a source local time into one or more target locations on an explicit ISO date, for the current moment, or from a simple human time such as "3pm Tuesday". Route messier raw prompts through answer_time_question so the answer layer can classify and resolve them before conversion. |
get_overlap_hours | Required locationsdateOptional countryCodes | Scheduling workflows | Returns shared overlap across locations instead of leaving the caller to compute it manually. Use answer_time_question first when the user gives a relative date such as "this week", "tomorrow", or "next Friday". |
find_meeting_time | Required locationsOptional countryCodesdate | Agent and meeting planning | Returns ranked meeting suggestions and a planner link back into findtime.io. Use answer_time_question first when the user gives a relative date such as "next week" or "Friday". |
check_proposed_time | Required locationsstartOptional homecountryCodesdatedurationMinutes | A time the user already picked | Calls /meeting/check. Returns a verdict per city (ok, early, late, or sleep), up to three better slots, shareText to paste, and a planner link. Pass start as an ISO instant, or as a local time with home set to an IANA timezone. |
are_they_awake | Required theirCitiesOptional myTimemyTimezonemyCity | Ping timing | Calls /meeting/awake. Says whether people in other cities are in work hours, awake, or asleep at one moment. myTime defaults to now. A rough moment comes with better slots and a planner link. |
rank_recurring_slot | Required locationsweekdaytimehomeOptional occurrences | Weekly standups | Calls /meeting/recurring. Scores who a weekly wall-clock time punishes, includes a daylight-saving week when one falls in the next 26 weeks, and suggests a kinder slot. |
save_team | Required teamIdlocations | Saved groups (hosted only) | Creates or replaces a homepage planner Saved group for the signed-in Google account, with the full city list. Needs meetings:plan. Hosted server only; the npm package has no team tools. |
get_team | Required teamId | Saved groups (hosted only) | Loads one Saved group by its exact name. Needs time:read. Hosted server only. |
list_teams | none | Saved groups (hosted only) | Lists the Saved groups of the signed-in Google account. Pass an exact name as teamId to find_meeting_time, check_proposed_time, are_they_awake, or rank_recurring_slot when the call has no locations. Needs time:read. Hosted server only. |
rename_team | Required teamIdnextName | Saved groups (hosted only) | Renames a Saved group and keeps its cities. Needs meetings:plan. Hosted server only. |
delete_team | Required teamId | Saved groups (hosted only) | Deletes a Saved group. A deleted group stays deleted. Needs meetings:plan. Hosted server only. |
send_feedback | Required toolquerywhatWasWrongOptional expectedAnswer | Reporting a wrong answer | Reports a wrong, incomplete, or unhelpful answer. The query text is discarded; only the tool name and error class are kept. |
search_timezones | Required queryOptional countryCodelimit | Ambiguity handling | Resolve places like Victoria or timezone abbreviations like IST before a later tool call. countryCode is a ranking hint, not a strict result filter. |
get_location_by_id | Required id | Deterministic hydration | Hydrate a stable `findtime:` location id when you want exact repeatability across calls. |
Booking tools
The hosted server adds tools for guests' agents and hosts' agents. A guest's agent can only request a time. The host approves or declines every request. findtime sends the host one new-request email and the guest one email saying the request was sent. The same routes are in the Booking API.
- Open Claude (desktop app or claude.ai) and go to Settings → Connectors.
- Click Add custom connector.
- Name it
findtime.ioand set the URL tohttps://mcp.findtime.io/mcp, then save. - Click Connect and sign in with Google. Use your own Google account. If it asks for permission, say yes.
- In a chat, turn findtime.io on from the + menu → Connectors.
- Send a new message once it's connected.
Claude sends meeting requests in your name, using your Google email. It can't book anything; the host approves every request. To manage your own booking page, findtime shows a consent page. Click Continue only if you want Claude to act as the host.
If the findtime tools don't appear, disconnect and reconnect the connector, or start a new chat so the tool list refreshes.
To remove access later, disconnect findtime.io in Claude's connector settings.
- Open ChatGPT on the web and go to Plugins.
- Select the plus button, then Add custom MCP server.
- Name it
findtime.io. Under Connection, enterhttps://mcp.findtime.io/mcpas the Server URL. - Choose OAuth authentication and sign in with Google when prompted.
- Review the risk warning, select I understand and want to continue, then Create as a plugin.
- Install the resulting plugin. In a chat, type
@and select it.
Workspace permissions and security settings may restrict custom MCP servers. These steps follow OpenAI's custom MCP server documentation. Creating a custom connection does not mean the connector is listed in a directory.
xAI documents remote MCP support in its native SDK and Responses API with Streaming HTTP or SSE. In your API request, add an MCP tool with server_url set to https://mcp.findtime.io/mcp and server_label set to findtime. Supply an authorized token through authorization.
This is an API integration. The xAI remote MCP documentation does not establish a consumer connector setup flow in grok.com or a public directory submission process.
For hosts: let agents request your times
Open Booking on findtime.io while signed in. On the Hours tab in Simple mode, after the page is published, use the robot icon next to pause and lock. Off, its label is Let AI agents request times. On, it reads AI agent requests on. Click it again to turn it off. Until it is on, agents see your handle as not found.
What happens next
- Guest: Claude shows the time back in both zones and asks you to confirm. After you say yes, it sends the request, and findtime emails you that it was sent. Nothing is on anyone's calendar yet.
- Host: findtime sends one new-booking-request email, tagged "via AI agent". Approve or decline it in findtime.
- On approve: findtime creates the Google Calendar event. When the guest is on the event, Google emails them the invite, with Meet when the host includes it, and findtime sends no second email. Otherwise findtime emails the guest a Confirmed email with an add-to-calendar link. If the host declines, findtime emails the guest. Check status with
get_booking_status. - On cancel: the guest is told once. When they're on the Google Calendar event, Google's cancellation tells them. Otherwise findtime emails them, and a cancelled pending request always gets a findtime email. When the guest cancels, findtime also emails the host.
- Paywall: each host gets a few free approved meetings. After those, approving needs the one-time $4.99 unlock in findtime. An agent can't pay; it gives you a link instead.
Try it
A guest can say: "Use findtime to book 30 minutes with findtime.io/b/hkchao next Tuesday afternoon my time." Claude finds open times, reads the choice back, then sends the request once you say yes. The host gets one findtime email and approves it in findtime.
- Every write is two steps. The first call returns a read-back and changes nothing. Call again with
confirm: trueonly after the person says yes. - Host tools act only on the signed-in host's own page. Approve needs Google Calendar connected and, past the free meetings, the $4.99 unlock. The agent never pays or connects Calendar.
Parameter lists are the main ones. The tool schemas from tools/list are authoritative, including passcode, invite, meetingType, exactStart, subject and notes.
Guest tools
| Tool | Parameters | Scope | What it does |
|---|---|---|---|
get_host_booking_profile | handle | time:read | Host name, zone, meeting lengths, one meeting type (labeled Meeting), minimum notice, passcode flag. |
find_host_slots | handle, durationMinutes, askerZone, dates, hours, weekdays, order, limit | time:read | Numbered options in the guest's zone and the host's. Option ids last about 15 minutes. |
request_booking | handle, optionId, guestName, guestZone, idempotencyKey, confirm | booking:request | Sends a request for the host to approve. First call returns a read-back; call again with confirm after the guest says yes. |
get_booking_status | requestId, guestTrackingToken | time:read | Pending, confirmed, declined or cancelled, with the meeting link once approved. |
list_my_booking_requests | guestHistoryToken | time:read | Every request this guest sent to one host. |
cancel_booking | requestId, guestTrackingToken or guestHistoryToken, reason, confirm | time:read | Cancels a request or approved meeting. The host is emailed. The guest gets a "You cancelled" email from findtime, unless Google's cancellation already reached them. A pending request always gets that email. |
reschedule_booking | requestId, guestTrackingToken or guestHistoryToken, optionId, confirm | booking:request | Replaces a pending request with a new time. Approved meetings need the host. |
Host tools
| Tool | Parameters | Scope | What it does |
|---|---|---|---|
get_my_booking_page | none | booking:host | Link, lengths, weekly hours, pause, passcode, agent switch, free meetings used and left, invite links. |
list_booking_requests | status, from, to | booking:host | Inbox with guest, times in the host's zone, a "via AI agent" tag, lifecycleVersion and olderRequests. |
approve_booking_request | requestId, lifecycleVersion, message, googleMeet, confirm | booking:host | Adds the event to Google Calendar. May return needs_calendar_connect, needs_payment, needs_sync or conflict. |
decline_booking_request | requestId, lifecycleVersion, reason, confirm | booking:host | Declines a request. |
cancel_booking_as_host | requestId, lifecycleVersion, reason, confirm | booking:host | Cancels a request or approved meeting; the status changes first, then the calendar event is removed. The guest is told once: by Google's cancellation when they're on the event, otherwise by a findtime email. |
update_booking_page | durations, defaultDuration, weeklyHours, paused, agentBooking, confirm | booking:host | Changes lengths, hours, pause, or the agent switch. |
create_invite_link | guestName, guestEmail, durationMinutes, expiresInDays, confirm | booking:host | Makes a personal link for one guest. The host sends it. |
revoke_invite_link | linkId, confirm | booking:host | Stops a personal link from working. |
If something goes wrong
- "not taking requests" (
host_not_taking_requests): the host's page is paused, or its booking window has ended. Ask the host to reopen it in findtime. Retrying won't help. - "host not found" (
host_not_found): the handle is wrong, or the host hasn't turned on Let AI agents request times (the robot icon on Hours, after the page is published). Ask the host for their findtime.io/b/ link. - Permission error: If it asks for permission, say yes. If booking fails with a permission error, disconnect findtime.io, connect again, and ask again.
- "already has a request" (
existing_request): you already asked this host for an overlapping time. No new request was sent. Ask Claude to check or cancel the earlier request before asking for a new time. - "needs payment" (
needs_payment): the host has used the free meetings. The host opens the link and unlocks in findtime, then approves.