Scheduling for VisiQuate and partners
Find a time everyone can actually make.
Give your AI assistant a list of names. It answers with times when all of them are free โ across timezones, around working hours, and respecting out-of-office. It never learns what anybody is doing.
What it does
Required and optional attendees
Mark anyone optional and their conflicts stop being blocking. Every suggested time says whether it suits everyone or only everyone required โ and names the optional people who would miss it.
Each person's own hours
Times are proposed inside each attendee's working hours, in their own timezone, and rendered in yours. Out-of-office and focus-time blocks count as busy.
Outsiders are never guessed at
Anyone whose calendar this service cannot read is reported as unknown โ never quietly assumed to be free. A gap in knowledge beats a confident wrong answer.
It explains a no
When nothing fits, you get the reason and the cheapest fix: widen the window, shorten the meeting, or make one specific person optional.
Connect your assistant
Pick your client. Browser-based clients sign you in automatically; command-line and API clients need a token you create yourself.
Signs you in through your browser. Nothing to paste.
Settings โ Connectors โ Add custom connector
Name: VisiQuate Free/Busy
URL: https://freebusy.visiquate.com/mcp
Claude opens a sign-in window the first time you use it.
Sign in with your work email and you are done.
Signs you in through your browser. Nothing to paste.
claude mcp add --transport http visiquate-freebusy https://freebusy.visiquate.com/mcp
# then, inside Claude Code, authenticate:
/mcp
Signs you in through your browser. Nothing to paste.
# ~/.cursor/mcp.json
{
"mcpServers": {
"visiquate-freebusy": {
"url": "https://freebusy.visiquate.com/mcp"
}
}
}
Signs you in through your browser. Nothing to paste.
Settings โ Connectors โ Advanced โ Developer mode
Create connector
Name: VisiQuate Free/Busy
MCP server URL: https://freebusy.visiquate.com/mcp
Authentication: OAuth
ChatGPT walks you through sign-in when you add it.
Needs an access token, because this client cannot open a browser to sign in. Create one on your settings page.
# ~/.codex/config.toml
experimental_use_rmcp_client = true
[mcp_servers.visiquate_freebusy]
url = "https://freebusy.visiquate.com/mcp"
bearer_token_env_var = "VQ_FREEBUSY_TOKEN"
# then, in your shell:
export VQ_FREEBUSY_TOKEN=vqfb_your_token_here
Needs an access token, because this client cannot open a browser to sign in. Create one on your settings page.
import os
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
tools=[{
"type": "mcp",
"server_label": "visiquate_freebusy",
"server_url": "https://freebusy.visiquate.com/mcp",
"headers": {
"Authorization": f"Bearer {os.environ['VQ_FREEBUSY_TOKEN']}"
},
"require_approval": "never",
}],
input="Find 45 minutes next week for Brent Langston and Megan Langston.",
)
Needs an access token, because this client cannot open a browser to sign in. Create one on your settings page.
curl -s https://freebusy.visiquate.com/mcp \
-H "Authorization: Bearer $VQ_FREEBUSY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "find_meeting_times",
"arguments": {
"attendees": [
{"person": "brent.langston@visiquate.com"},
{"person": "Megan Langston", "optional": true}
],
"duration_minutes": 45
}
}
}'
Why this cannot leak your calendar
Most integrations promise to hide event details. This one is built so it never receives them. The service account behind it holds exactly three Google scopes, and the one that returns calendar data returns start and end times only โ the API response has no field for a title, an attendee, or an organiser.
What it can read
- That a person is busy between two instants
- A person's calendar timezone
- Names and email addresses from the staff directory
What it cannot read, at any price
- Event titles, descriptions, or locations
- Who else is invited to anything
- Whether a busy block is a meeting, a flight, or a dentist
- Anything at all about a calendar it has not been asked about
The scopes are asserted in code against a frozen allowlist: a change that tried to request event access fails at startup rather than shipping quietly. The one thing the service does reveal is whether a named person is free at a given time โ which is the entire point of free/busy, and says nothing about what they are doing.
Who can connect
Access is limited to approved email domains, checked by Cloudflare Access before a request reaches this service:
@visiquate.com @accel-kkr.com
VisiQuate staff sign in with their normal corporate account. Partners sign in with a one-time code emailed to their work address โ no account to create, and nothing for us to manage on your identity provider. To add a partner domain, a VisiQuate administrator edits one policy.
The three tools
| Tool | What you get |
|---|---|
resolve_people |
Turns names into directory matches, and asks you to choose when a name fits several people. |
find_meeting_times |
Ranked slots for a group, tagged ALL_AVAILABLE or
ALL_REQUIRED_AVAILABLE, shown in every relevant timezone. |
check_availability |
A verdict per person for one specific time: free, busy, outside working hours, or unknown. |