
Google Calendar
Available ActionsEach successful request consumes credits as outlined below.
Details
Comprehensive Google Calendar integration tool that enables AI agents to manage calendar events and check availability on behalf of users. The tool supports all essential calendar operations including listing calendars and events, creating events with full details or natural language input, updating and deleting events, searching for events by text, and checking free/busy availability. Features include support for recurring events with flexible scheduling patterns, Google Meet video conference integration, attendee management with customizable notification settings, and timezone-aware scheduling. The tool handles both timed events and all-day events, supports custom reminders, and provides paginated results for calendars with many events.
Use Cases
Scheduling meetings with attendees, Checking calendar availability before booking, Creating recurring events like weekly team standups, Adding Google Meet links to virtual meetings, Finding events by searching for keywords, Managing event details and locations, Sending calendar invitations to external participants, Viewing upcoming events for the day or week, Canceling and rescheduling meetings with notifications, Quick event creation from natural language descriptions
Connect Your Agent In 5 Min
Watch the setup guide for your platform
Or Install Locally
STDIO connector for Claude Code, Codex, Cursor, Zed, and other LLMs that require STDIO or custom connections. This lightweight connector routes requests to https://api.agentpmt.com/mcp. All tool execution happens in the cloud and the server cannot edit any files on your computer.
npm install -g @agentpmt/mcp-routeragentpmt-setupcurl -X POST "https://api.agentpmt.com/products/purchase" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ********" \
-d '{
"product_id": "6961b8314991c3b032310fca",
"parameters": {
"action": "list_calendars",
"calendar_id": "primary",
"max_results": 50
}
}'import requests
import json
url = "https://api.agentpmt.com/products/purchase"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer ********"
}
data = {
"product_id": "6961b8314991c3b032310fca",
"parameters": {
"action": "list_calendars",
"calendar_id": "primary",
"max_results": 50
}
}
response = requests.post(url, headers=headers, json=data)
print(response.status_code)
print(response.json())const url = "https://api.agentpmt.com/products/purchase";
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer ********"
};
const data = {
product_id: "6961b8314991c3b032310fca",
parameters: {
"action": "list_calendars",
"calendar_id": "primary",
"max_results": 50
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));const axios = require('axios');
const url = "https://api.agentpmt.com/products/purchase";
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer ********"
};
const data = {
product_id: "6961b8314991c3b032310fca",
parameters: {
"action": "list_calendars",
"calendar_id": "primary",
"max_results": 50
}
};
axios.post(url, data, { headers })
.then(response => {
console.log(response.status);
console.log(response.data);
})
.catch(error => {
console.error("Error:", error.message);
});Login to view your API and budget keys. The example above uses placeholder values. Sign in to see personalized code with your bearer token.
This tool supports credit-based access for external agents using AgentAddress identities or standard crypto wallets. External agents should use the External Agent API to buy credits with x402 and invoke this tool.
1. Buy Credits
Purchase credits via x402 payment (500 credit minimum, 100 credits = $1).
# Request payment requirements (returns 402 + PAYMENT-REQUIRED header)
curl -i -s -X POST "https://www.agentpmt.com/api/external/credits/purchase" \
-H "Content-Type: application/json" \
-d '{ "wallet_address":"0xYOUR_WALLET", "credits": 500, "payment_method":"x402" }'
# Sign the EIP-3009 authorization, then retry with signature header
curl -s -X POST "https://www.agentpmt.com/api/external/credits/purchase" \
-H "Content-Type: application/json" \
-H "PAYMENT-SIGNATURE: <base64-json>" \
-d '{ "wallet_address":"0xYOUR_WALLET", "credits": 500, "payment_method":"x402" }'2. Create a Session Nonce (nonce used in signed balance/invoke)
curl -s -X POST "https://www.agentpmt.com/api/external/auth/session" \
-H "Content-Type: application/json" \
-d '{ "wallet_address":"0xYOUR_WALLET" }'3. Invoke This Tool
Sign the message with your wallet (EIP-191 personal-sign), then POST to the invoke endpoint.
# Sign this message (wallet MUST be lowercased):
# agentpmt-external
# wallet:0xyourwallet...
# session:<session_nonce>
# request:<request_id>
# action:invoke
# product:6961b8314991c3b032310fca
# payload:<sha256(canonical_json(parameters))>
curl -s -X POST "https://www.agentpmt.com/api/external/tools/6961b8314991c3b032310fca/invoke" \
-H "Content-Type: application/json" \
-d '{
"wallet_address": "0xYOUR_WALLET",
"session_nonce": "<session_nonce>",
"request_id": "invoke-uuid",
"signature": "0x<signature>",
"parameters": {
"action": "your_action",
"your_param": "value"
}
}'Credentials
Manage credentials in your dashboard.
Actions(9)
list_calendars5cr3 paramsList all calendars the user has access to.
list_calendars5cr3 paramsList all calendars the user has access to.
calendar_idstringCalendar ID to operate on. Use 'primary' for the user's main calendar.
primarymax_resultsintegerMaximum number of calendars to return (1-250).
50page_tokenstringToken for fetching next page of results from a previous call.
list_events5cr5 paramsList events from a calendar within an optional date range. Defaults to upcoming events from the current time.
list_events5cr5 paramsList events from a calendar within an optional date range. Defaults to upcoming events from the current time.
calendar_idstringCalendar ID to list events from. Defaults to 'primary'.
primarytime_minstringStart of time range in ISO 8601 format (e.g., '2026-03-10T00:00:00Z'). Defaults to current time if omitted.
time_maxstringEnd of time range in ISO 8601 format.
max_resultsintegerMaximum number of events to return (1-250).
50page_tokenstringToken for fetching next page of results.
get_event5cr2 params(1 required)Get full details of a specific calendar event.
get_event5cr2 params(1 required)Get full details of a specific calendar event.
event_idrequiredstringEvent ID to retrieve. Obtain from list_events or search_events.
calendar_idstringCalendar ID containing the event. Defaults to 'primary'.
primarycreate_event5cr17 params(1 required)Create a new calendar event. Provide either timed event fields (start_datetime/end_datetime) or all-day event fields (start_date/end_date).
create_event5cr17 params(1 required)Create a new calendar event. Provide either timed event fields (start_datetime/end_datetime) or all-day event fields (start_date/end_date).
summaryrequiredstringEvent title (max 1024 characters).
start_datetimestringEvent start time in ISO 8601 format with timezone (e.g., '2026-03-15T14:00:00-05:00'). Required for timed events.
end_datetimestringEvent end time in ISO 8601 format with timezone. Required for timed events.
start_datestringAll-day event start date in YYYY-MM-DD format. Required for all-day events.
end_datestringAll-day event end date in YYYY-MM-DD format (exclusive - use day after for single-day events). Required for all-day events.
calendar_idstringCalendar ID to create the event in. Defaults to 'primary'.
primarydescriptionstringEvent description or notes.
locationstringEvent location (address or place name).
timezonestringIANA timezone (e.g., 'America/New_York'). Defaults to calendar timezone when omitted.
attendeesarrayList of attendees to invite to the event.
send_updatesstringWho to send email notifications to.
allrecurrenceobjectRecurrence settings for repeating events.
frequency*(string)- How often the event repeats. Required when recurrence is provided.interval(integer)- Repeat every N frequency units.count(integer)- Total number of occurrences.until(string)- End date for recurrence (YYYY-MM-DD or ISO 8601).by_day(array)- Days of week for WEEKLY frequency.remindersarrayCustom reminder settings (only used when use_default_reminders is false).
use_default_remindersbooleanUse calendar's default reminders instead of custom ones.
trueadd_video_conferencebooleanAutomatically add a Google Meet link to the event.
falsevisibilitystringEvent visibility setting.
show_asstringHow the event appears in free/busy queries.
quick_add5cr3 params(1 required)Create an event from a natural language description. Google Calendar parses the text to extract event title, date, and time.
quick_add5cr3 params(1 required)Create an event from a natural language description. Google Calendar parses the text to extract event title, date, and time.
textrequiredstringNatural language event description (e.g., 'Lunch with Sarah tomorrow at noon').
calendar_idstringCalendar ID to create the event in. Defaults to 'primary'.
primarysend_updatesstringWho to send email notifications to.
allupdate_event5cr17 params(1 required)Update an existing event. Only provided fields will be changed; all other fields remain as-is. The existing event is fetched first, then the provided fields are merged.
update_event5cr17 params(1 required)Update an existing event. Only provided fields will be changed; all other fields remain as-is. The existing event is fetched first, then the provided fields are merged.
event_idrequiredstringEvent ID to update.
calendar_idstringCalendar ID containing the event. Defaults to 'primary'.
primarysummarystringNew event title.
descriptionstringNew event description.
locationstringNew event location.
start_datetimestringNew start time in ISO 8601 (must provide end_datetime too).
end_datetimestringNew end time in ISO 8601 (must provide start_datetime too).
start_datestringNew all-day start date YYYY-MM-DD (must provide end_date too).
end_datestringNew all-day end date YYYY-MM-DD (must provide start_date too).
timezonestringIANA timezone for the updated times.
attendeesarrayUpdated attendee list (replaces existing attendees).
recurrenceobjectUpdated recurrence settings.
frequency*(string)- How often the event repeats. Required when recurrence is provided.interval(integer)- Repeat every N frequency units.count(integer)- Total number of occurrences.until(string)- End date for recurrence.by_day(array)- Days of week for WEEKLY frequency.remindersarrayUpdated custom reminders.
add_video_conferencebooleanAdd a Google Meet link.
falsevisibilitystringUpdated visibility setting.
show_asstringUpdated availability display.
send_updatesstringWho to send notification emails to.
alldelete_event5cr3 params(1 required)Delete an event from the calendar.
delete_event5cr3 params(1 required)Delete an event from the calendar.
event_idrequiredstringEvent ID to delete.
calendar_idstringCalendar ID containing the event. Defaults to 'primary'.
primarysend_updatesstringWho to send cancellation notifications to.
allsearch_events5cr6 params(1 required)Search for events by text. Searches event title, description, location, and attendees.
search_events5cr6 params(1 required)Search for events by text. Searches event title, description, location, and attendees.
queryrequiredstringSearch text to match against events.
calendar_idstringCalendar ID to search in. Defaults to 'primary'.
primarytime_minstringStart of search range in ISO 8601. Defaults to current time.
time_maxstringEnd of search range in ISO 8601.
max_resultsintegerMaximum events to return (1-250).
50page_tokenstringPagination token from a previous response.
check_availability5cr6 params(2 required)Check free/busy times across one or more calendars. Returns busy periods, free blocks, and common available time slots when checking multiple calendars.
check_availability5cr6 params(2 required)Check free/busy times across one or more calendars. Returns busy periods, free blocks, and common available time slots when checking multiple calendars.
time_minrequiredstringStart of range in ISO 8601 format.
time_maxrequiredstringEnd of range in ISO 8601 format.
calendar_idstringCalendar ID; used when check_calendars is not provided. Defaults to 'primary'.
primarycheck_calendarsarrayMultiple calendar IDs to check availability across.
attendee_emailsarrayEmail addresses to check availability for (requires domain access).
timezonestringIANA timezone for the query.
Usage Instructions
Usage guidance provided directly by the developer for this product.
Google Calendar
Manage Google Calendar events, check availability, and organize schedules. Requires a Google OAuth connection with calendar permissions.
Actions
list_calendars
List all calendars the user has access to.
Required: None (uses defaults)
Optional:
calendar_id(string) - Calendar ID; defaults to "primary"max_results(integer) - Max calendars to return, 1-250; default 50page_token(string) - Pagination token from a previous response
Example:
{
"action": "list_calendars"
}
list_events
List events from a calendar, optionally filtered by date range.
Required: None (defaults to upcoming events from now)
Optional:
calendar_id(string) - Calendar ID; defaults to "primary"time_min(string) - Start of range in ISO 8601 (e.g., "2026-03-10T00:00:00Z"); defaults to current timetime_max(string) - End of range in ISO 8601max_results(integer) - Max events to return, 1-250; default 50page_token(string) - Pagination token from a previous response
Example:
{
"action": "list_events",
"time_min": "2026-03-10T00:00:00Z",
"time_max": "2026-03-17T00:00:00Z"
}
get_event
Get full details of a specific event.
Required:
event_id(string) - The event ID (obtained from list_events or search_events)
Optional:
calendar_id(string) - Calendar ID; defaults to "primary"
Example:
{
"action": "get_event",
"event_id": "abc123def456"
}
create_event
Create a new calendar event. Provide either timed or all-day date fields.
Required:
summary(string) - Event title (max 1024 characters)- Either timed event fields:
start_datetimeandend_datetime(ISO 8601 with timezone, e.g., "2026-03-15T14:00:00-05:00") - Or all-day event fields:
start_dateandend_date(YYYY-MM-DD format; end_date is exclusive, so use the day after for single-day events)
Optional:
calendar_id(string) - Calendar ID; defaults to "primary"description(string) - Event description or noteslocation(string) - Event location (address or place name)timezone(string) - IANA timezone (e.g., "America/New_York"); defaults to calendar timezoneattendees(array) - List of attendees, each with:email(string, required) - Attendee emaildisplay_name(string) - Display nameoptional(boolean) - Whether attendance is optional; default false
send_updates(string) - Who gets email notifications: "all" (default), "externalOnly", or "none"recurrence(object) - Repeating event settings:frequency(string, required) - "DAILY", "WEEKLY", "MONTHLY", or "YEARLY"interval(integer) - Repeat every N units; default 1count(integer) - Total number of occurrencesuntil(string) - End date for recurrence (YYYY-MM-DD or ISO 8601)by_day(array) - Days of week for WEEKLY: ["MO", "TU", "WE", "TH", "FR", "SA", "SU"]
reminders(array) - Custom reminders (only used whenuse_default_remindersis false), each with:method(string) - "email" or "popup"; default "popup"minutes(integer) - Minutes before event, 0-40320
use_default_reminders(boolean) - Use calendar defaults; default trueadd_video_conference(boolean) - Add a Google Meet link; default falsevisibility(string) - "default", "public", "private", or "confidential"show_as(string) - "busy" or "free"
Example - Timed event with attendees and Google Meet:
{
"action": "create_event",
"summary": "Weekly Team Sync",
"start_datetime": "2026-03-15T10:00:00-05:00",
"end_datetime": "2026-03-15T10:30:00-05:00",
"location": "Conference Room A",
"description": "Weekly team sync to review project progress",
"attendees": [
{"email": "alice@example.com"},
{"email": "bob@example.com", "optional": true}
],
"add_video_conference": true,
"recurrence": {
"frequency": "WEEKLY",
"by_day": ["MO"],
"count": 12
}
}
Example - All-day event:
{
"action": "create_event",
"summary": "Company Holiday",
"start_date": "2026-07-04",
"end_date": "2026-07-05",
"show_as": "free"
}
quick_add
Create an event from a natural language description. Google Calendar parses the text to extract the event title, date, and time.
Required:
text(string) - Natural language event description
Optional:
calendar_id(string) - Calendar ID; defaults to "primary"send_updates(string) - Who gets notifications: "all" (default), "externalOnly", or "none"
Example:
{
"action": "quick_add",
"text": "Lunch with Sarah tomorrow at noon at Cafe Milano"
}
update_event
Update an existing event. Only the fields you provide will be changed; all other fields remain as-is.
Required:
event_id(string) - The event ID to update
Optional (provide any fields to change):
calendar_id(string) - Calendar ID; defaults to "primary"summary(string) - New event titledescription(string) - New descriptionlocation(string) - New locationstart_datetime/end_datetime(string) - New times (must provide both)start_date/end_date(string) - New all-day dates (must provide both)timezone(string) - IANA timezoneattendees(array) - Updated attendee list (replaces existing)recurrence(object) - Updated recurrence settings (requires frequency)reminders(array) - Updated remindersadd_video_conference(boolean) - Add Google Meet linkvisibility(string) - Updated visibilityshow_as(string) - Updated availability displaysend_updates(string) - Who gets notifications: "all" (default), "externalOnly", or "none"
Example:
{
"action": "update_event",
"event_id": "abc123def456",
"summary": "Updated Meeting Title",
"location": "Room B instead",
"start_datetime": "2026-03-15T11:00:00-05:00",
"end_datetime": "2026-03-15T11:30:00-05:00"
}
delete_event
Delete an event from the calendar.
Required:
event_id(string) - The event ID to delete
Optional:
calendar_id(string) - Calendar ID; defaults to "primary"send_updates(string) - Who gets cancellation notifications: "all" (default), "externalOnly", or "none"
Example:
{
"action": "delete_event",
"event_id": "abc123def456",
"send_updates": "none"
}
search_events
Search for events by text. Searches event title, description, location, and attendees.
Required:
query(string) - Search text
Optional:
calendar_id(string) - Calendar ID; defaults to "primary"time_min(string) - Start of search range in ISO 8601; defaults to current timetime_max(string) - End of search range in ISO 8601max_results(integer) - Max events to return, 1-250; default 50page_token(string) - Pagination token
Example:
{
"action": "search_events",
"query": "budget review",
"time_min": "2026-01-01T00:00:00Z",
"time_max": "2026-12-31T23:59:59Z"
}
check_availability
Check free/busy times across one or more calendars. Returns busy periods and available time slots, with common free slots calculated when checking multiple calendars.
Required:
time_min(string) - Start of range in ISO 8601time_max(string) - End of range in ISO 8601
Optional:
calendar_id(string) - Calendar ID; defaults to "primary" (used when check_calendars is not provided)check_calendars(array of strings) - Multiple calendar IDs to checkattendee_emails(array of strings) - Email addresses to check availability for (requires domain access)timezone(string) - IANA timezone for the query
Example:
{
"action": "check_availability",
"time_min": "2026-03-15T08:00:00-05:00",
"time_max": "2026-03-15T18:00:00-05:00",
"check_calendars": ["primary", "team-calendar@group.calendar.google.com"],
"attendee_emails": ["alice@example.com", "bob@example.com"]
}
Common Workflows
Find a meeting time: Use check_availability with attendee emails to find overlapping free slots, then create_event with the chosen time and those attendees.
Reschedule an event: Use search_events or list_events to find the event ID, then update_event with new times.
Set up a recurring meeting: Use create_event with recurrence to define frequency, days, and end conditions.
View the week ahead: Use list_events with time_min set to today and time_max set to 7 days out.
Important Notes
- All date/times use ISO 8601 format. Include timezone offsets for timed events (e.g., "2026-03-15T14:00:00-05:00").
- For all-day events,
end_dateis exclusive: a single-day event on March 15 uses start_date "2026-03-15" and end_date "2026-03-16". - When updating attendees, the provided list replaces the existing attendees entirely.
- By default, email notifications are sent to all attendees for create, update, and delete actions. Set
send_updatesto "none" to suppress notifications. - Event IDs are obtained from
list_events,search_events, or the response ofcreate_event. - Use
calendar_idof "primary" (the default) for the user's main calendar, or get other calendar IDs fromlist_calendars. - The
recurrenceobject requiresfrequencywhen provided. Use eithercountoruntilto limit recurrence, not both.
About The Developer

Apoth3osis
Joined Agent Payment: August 14, 2025
We build tools that enable AI agents to excel in the mathematical realm.
Our small team develops experimental and unique solutions in the AI arena, with a strong focus on modular computing for agentic applications and custom model deployment. We have handled projects for a variety of applications across many sectors, from algorithmic trading and financial analysis, to molecular simulations and predictions, to habitat and biodiversity monitoring and wildlife conservation.





