Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
MCP server for Google Calendar integration with multi-account OAuth support MCP Server Template for Cloudflare Workers A production-ready template for building MCP (Model Context Protocol) servers on Cloudflare Workers with better-auth social login. Features - **better-auth Social Login** - Google, Microsoft, and GitHub OAuth with automatic session management - **MCP OAuth Provider** - Dynamic client registration for Claude.ai and Claude Code - **Cloudflare Workers** - Serverless deployment Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Freshness
Last checked 2/22/2026
Best For
Contract is available with explicit auth and schema references.
Not Ideal For
google-calendar-mcp is not ideal for teams that need stronger public trust telemetry, lower setup complexity, or more explicit contract coverage before production rollout.
Evidence Sources Checked
editorial-content, capability-contract, runtime-metrics, public facts pack
MCP server for Google Calendar integration with multi-account OAuth support MCP Server Template for Cloudflare Workers A production-ready template for building MCP (Model Context Protocol) servers on Cloudflare Workers with better-auth social login. Features - **better-auth Social Login** - Google, Microsoft, and GitHub OAuth with automatic session management - **MCP OAuth Provider** - Dynamic client registration for Claude.ai and Claude Code - **Cloudflare Workers** - Serverless deployment
Public facts
6
Change events
1
Artifacts
0
Freshness
Feb 22, 2026
Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Trust score
Unknown
Compatibility
MCP
Freshness
Feb 22, 2026
Vendor
Jezweb
Artifacts
0
Benchmarks
0
Last release
1.0.0
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Setup snapshot
git clone https://github.com/jezweb/google-calendar-mcp.gitSetup complexity is MEDIUM. Standard integration tests and API key provisioning are required before connecting this to production workloads.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Jezweb
Protocol compatibility
MCP
Auth modes
mcp, api_key, oauth
Machine-readable schemas
OpenAPI or schema references published
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
bash
# Copy this template to your new project cp -r mcp-server-template-cloudflare my-new-mcp cd my-new-mcp # Install dependencies npm install
jsonc
{
"name": "my-new-mcp", // Your worker name
"kv_namespaces": [
{
"binding": "OAUTH_KV",
"id": "YOUR_KV_NAMESPACE_ID" // Create with: npx wrangler kv:namespace create OAUTH_KV
}
],
"d1_databases": [
{
"binding": "DB",
"database_name": "my-mcp-db",
"database_id": "YOUR_D1_DATABASE_ID" // Create with: npx wrangler d1 create my-mcp-db
}
],
"durable_objects": {
"bindings": [
{
"name": "MCP_OBJECT",
"class_name": "MyMCP" // Update if you rename the class
}
]
},
"migrations": [
{
"tag": "v1",
"new_sqlite_classes": ["MyMCP"] // Must match class_name above
}
],
"vars": {
"ENABLE_CONVERSATION_MEMORY": "true", // D1-backed chat history
"ENABLE_INTERNAL_AGENT": "false" // ask_agent tool (for voice agents)
}
}bash
# Required: Google OAuth echo "YOUR_GOOGLE_CLIENT_ID" | npx wrangler secret put GOOGLE_CLIENT_ID echo "YOUR_GOOGLE_CLIENT_SECRET" | npx wrangler secret put GOOGLE_CLIENT_SECRET # Required: better-auth session encryption python3 -c "import secrets; print(secrets.token_hex(32))" | npx wrangler secret put BETTER_AUTH_SECRET # Required: Cookie encryption for approved clients python3 -c "import secrets; print(secrets.token_hex(32))" | npx wrangler secret put COOKIE_ENCRYPTION_KEY # Optional: For Bearer token authentication python3 -c "import secrets; print(secrets.token_urlsafe(32))" | npx wrangler secret put AUTH_TOKEN # Optional: Microsoft Entra # echo "YOUR_MS_CLIENT_ID" | npx wrangler secret put MICROSOFT_CLIENT_ID # echo "YOUR_MS_CLIENT_SECRET" | npx wrangler secret put MICROSOFT_CLIENT_SECRET # Optional: GitHub # echo "YOUR_GH_CLIENT_ID" | npx wrangler secret put GITHUB_CLIENT_ID # echo "YOUR_GH_CLIENT_SECRET" | npx wrangler secret put GITHUB_CLIENT_SECRET
bash
npx wrangler deploy
typescript
// Basic user info const GOOGLE_SCOPES = 'openid email profile'; // Google Tasks const GOOGLE_SCOPES = 'openid email profile https://www.googleapis.com/auth/tasks'; // Google Calendar (read-only) const GOOGLE_SCOPES = 'openid email profile https://www.googleapis.com/auth/calendar.readonly'; // Gmail (read-only) const GOOGLE_SCOPES = 'openid email profile https://www.googleapis.com/auth/gmail.readonly';
typescript
this.server.tool(
'tool_name', // Unique identifier
'Tool description.', // Shown to Claude
{
param1: z.string().describe('Parameter description'),
param2: z.number().optional().describe('Optional parameter'),
},
async ({ param1, param2 }) => {
try {
// For Google API calls, use authorizedFetch():
const response = await this.authorizedFetch(
`https://api.example.com/endpoint?param=${param1}`
);
if (!response.ok) {
const error = await response.text();
throw new Error(`API error: ${error}`);
}
const data = await response.json();
return {
content: [{ type: 'text', text: `Result: ${JSON.stringify(data)}` }],
};
} catch (error) {
const message = error instanceof Error ? error.message : 'Unknown error';
return {
content: [{ type: 'text', text: `Error: ${message}` }],
isError: true,
};
}
}
);Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB MCP
Editorial quality
ready
MCP server for Google Calendar integration with multi-account OAuth support MCP Server Template for Cloudflare Workers A production-ready template for building MCP (Model Context Protocol) servers on Cloudflare Workers with better-auth social login. Features - **better-auth Social Login** - Google, Microsoft, and GitHub OAuth with automatic session management - **MCP OAuth Provider** - Dynamic client registration for Claude.ai and Claude Code - **Cloudflare Workers** - Serverless deployment
A production-ready template for building MCP (Model Context Protocol) servers on Cloudflare Workers with better-auth social login.
ask_agent tool with Workers AI gatekeeper for voice agents# Copy this template to your new project
cp -r mcp-server-template-cloudflare my-new-mcp
cd my-new-mcp
# Install dependencies
npm install
Update wrangler.jsonc:
{
"name": "my-new-mcp", // Your worker name
"kv_namespaces": [
{
"binding": "OAUTH_KV",
"id": "YOUR_KV_NAMESPACE_ID" // Create with: npx wrangler kv:namespace create OAUTH_KV
}
],
"d1_databases": [
{
"binding": "DB",
"database_name": "my-mcp-db",
"database_id": "YOUR_D1_DATABASE_ID" // Create with: npx wrangler d1 create my-mcp-db
}
],
"durable_objects": {
"bindings": [
{
"name": "MCP_OBJECT",
"class_name": "MyMCP" // Update if you rename the class
}
]
},
"migrations": [
{
"tag": "v1",
"new_sqlite_classes": ["MyMCP"] // Must match class_name above
}
],
"vars": {
"ENABLE_CONVERSATION_MEMORY": "true", // D1-backed chat history
"ENABLE_INTERNAL_AGENT": "false" // ask_agent tool (for voice agents)
}
}
https://your-worker.workers.dev/api/auth/callback/googleNote: better-auth uses
/api/auth/callback/{provider}pattern for OAuth callbacks.
Alternative Providers (Microsoft Entra, GitHub):
docs/BETTER_AUTH_ARCHITECTURE.md for setup instructions# Required: Google OAuth
echo "YOUR_GOOGLE_CLIENT_ID" | npx wrangler secret put GOOGLE_CLIENT_ID
echo "YOUR_GOOGLE_CLIENT_SECRET" | npx wrangler secret put GOOGLE_CLIENT_SECRET
# Required: better-auth session encryption
python3 -c "import secrets; print(secrets.token_hex(32))" | npx wrangler secret put BETTER_AUTH_SECRET
# Required: Cookie encryption for approved clients
python3 -c "import secrets; print(secrets.token_hex(32))" | npx wrangler secret put COOKIE_ENCRYPTION_KEY
# Optional: For Bearer token authentication
python3 -c "import secrets; print(secrets.token_urlsafe(32))" | npx wrangler secret put AUTH_TOKEN
# Optional: Microsoft Entra
# echo "YOUR_MS_CLIENT_ID" | npx wrangler secret put MICROSOFT_CLIENT_ID
# echo "YOUR_MS_CLIENT_SECRET" | npx wrangler secret put MICROSOFT_CLIENT_SECRET
# Optional: GitHub
# echo "YOUR_GH_CLIENT_ID" | npx wrangler secret put GITHUB_CLIENT_ID
# echo "YOUR_GH_CLIENT_SECRET" | npx wrangler secret put GITHUB_CLIENT_SECRET
npx wrangler deploy
src/index.ts: Update class name, server name, and toolssrc/oauth/google-handler.ts: Update GOOGLE_SCOPES and homepage contentwrangler.jsonc: Update worker name and class referencesEdit GOOGLE_SCOPES in src/oauth/google-handler.ts:
// Basic user info
const GOOGLE_SCOPES = 'openid email profile';
// Google Tasks
const GOOGLE_SCOPES = 'openid email profile https://www.googleapis.com/auth/tasks';
// Google Calendar (read-only)
const GOOGLE_SCOPES = 'openid email profile https://www.googleapis.com/auth/calendar.readonly';
// Gmail (read-only)
const GOOGLE_SCOPES = 'openid email profile https://www.googleapis.com/auth/gmail.readonly';
Add tools in the init() method of your MCP class:
this.server.tool(
'tool_name', // Unique identifier
'Tool description.', // Shown to Claude
{
param1: z.string().describe('Parameter description'),
param2: z.number().optional().describe('Optional parameter'),
},
async ({ param1, param2 }) => {
try {
// For Google API calls, use authorizedFetch():
const response = await this.authorizedFetch(
`https://api.example.com/endpoint?param=${param1}`
);
if (!response.ok) {
const error = await response.text();
throw new Error(`API error: ${error}`);
}
const data = await response.json();
return {
content: [{ type: 'text', text: `Result: ${JSON.stringify(data)}` }],
};
} catch (error) {
const message = error instanceof Error ? error.message : 'Unknown error';
return {
content: [{ type: 'text', text: `Error: ${message}` }],
isError: true,
};
}
}
);
Resources expose read-only data that LLMs can access. Add resources in the init() method:
this.server.resource(
'resource_name', // Unique identifier
'mcp://my-mcp/resource-path', // URI for the resource
{
description: 'What this resource provides',
mimeType: 'application/json',
},
async (uri) => ({
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify({
// Your data here
}, null, 2),
}],
})
);
Note: Claude.ai doesn't support resources yet (as of Dec 2025), but the API does. Adding resources now future-proofs your server.
Prompts are templated prompt definitions (like slash commands). Add prompts in the init() method:
this.server.prompt(
'prompt_name', // Unique identifier
'Description of what this prompt does',
{
content: z.string().describe('Required parameter'),
option: z.string().optional().describe('Optional parameter'),
},
async ({ content, option }) => ({
messages: [{
role: 'user',
content: {
type: 'text',
text: option
? `Process this with ${option}: ${content}`
: `Process this: ${content}`,
},
}],
})
);
Note: Claude.ai doesn't support prompts yet (as of Dec 2025), but the API does. Adding prompts now future-proofs your server.
Access the admin dashboard at /admin after logging in with Google OAuth.
Features:
Admin Setup:
Set admin emails (comma-separated):
echo "admin@example.com,user@example.com" | npx wrangler secret put ADMIN_EMAILS
The admin dashboard includes an AI-powered tool tester:
Supported Providers:
All external providers use AI Gateway's Compat endpoint - a single OpenAI-compatible API that works for all providers. The gateway handles format conversion automatically.
Setting up External Providers (BYOK - Recommended):
The easiest way is to configure API keys in AI Gateway (no code changes needed):
default (or use existing)echo "token" | npx wrangler secret put CF_AIG_TOKENnpx wrangler deployKeys are securely stored and automatically injected into requests.
Alternative: Environment Secrets
You can also set API keys as Worker secrets (overrides BYOK):
# Anthropic
echo "sk-ant-..." | npx wrangler secret put ANTHROPIC_API_KEY
# OpenAI
echo "sk-..." | npx wrangler secret put OPENAI_API_KEY
# If using Authenticated Gateway, also set:
echo "your-gateway-token" | npx wrangler secret put CF_AIG_TOKEN
# Don't forget to redeploy after setting secrets!
npx wrangler deploy
Note: Workers AI is free and works out of the box. External providers go through Cloudflare AI Gateway for logging, caching, and centralized key management.
The template uses AI Gateway's Compat endpoint - a single OpenAI-compatible API for all providers. Additional features available:
Per-Request Headers (add to your AI calls):
| Header | Purpose | Example |
|--------|---------|---------|
| cf-aig-cache-ttl | Cache responses (seconds) | 3600 = 1 hour |
| cf-aig-skip-cache | Bypass cache | true |
| cf-aig-request-timeout | Trigger fallback if slow (ms) | 10000 |
| cf-aig-metadata | Tag for analytics | {"userId":"..."} |
Response Headers (check after AI calls):
| Header | Meaning |
|--------|---------|
| cf-aig-cache-status | HIT or MISS |
| cf-aig-step | Which fallback was used (0 = primary) |
Dashboard-Only Features (configure in Cloudflare dashboard):
See AI Gateway docs for details.
src/
├── index.ts # Main MCP class with tools, resources, prompts + helper methods
├── types.ts # TypeScript interfaces (Env, Props, ToolMetadata, ChatMessage)
│
├── lib/
│ ├── auth.ts # better-auth configuration (social providers, OAuth Provider plugin)
│ ├── db/
│ │ ├── index.ts # Drizzle D1 database setup
│ │ └── schema.ts # better-auth tables + custom tables (Drizzle ORM)
│ ├── ai/
│ │ ├── index.ts # AI Gateway client
│ │ ├── providers.ts # Provider/model registry
│ │ └── openrouter.ts # Dynamic model fetching from OpenRouter
│ ├── memory/
│ │ └── index.ts # D1-backed conversation memory
│ ├── agent/
│ │ └── index.ts # Internal agent pattern (Workers AI gatekeeper)
│ ├── crypto.ts # Timing-safe token comparison
│ └── rate-limit.ts # KV-based rate limiting
│
├── admin/
│ ├── routes.ts # Admin API endpoints
│ ├── ui.ts # Admin dashboard HTML/CSS/JS
│ ├── chat.ts # AI chat handler with tool execution + D1 memory
│ ├── middleware.ts # Admin auth middleware
│ ├── session.ts # Admin session management
│ └── tokens.ts # Bearer token CRUD
│
├── oauth/ # MCP OAuth protocol handlers
│ ├── better-auth-handler.ts # OAuth routes via better-auth sessions
│ └── workers-oauth-utils.ts # CSRF, state, approval dialog utilities
│
├── pages/
│ ├── homepage.ts # Server homepage (marketing landing page)
│ └── login.ts # Social login page (Google, Microsoft, GitHub)
│
├── tools/
│ ├── index.ts # Tool registry (single source of truth)
│ ├── types.ts # Tool type definitions
│ ├── utility.ts # Utility tools (no auth)
│ ├── user.ts # User tools (require OAuth)
│ └── examples.ts # Example API call patterns
│
├── resources/
│ ├── index.ts # Resource registry
│ ├── types.ts # Resource type definitions
│ └── server.ts # Server info resources
│
├── prompts/
│ ├── index.ts # Prompt registry
│ ├── types.ts # Prompt type definitions
│ └── templates.ts # Prompt templates
│
└── migrations/
├── 0001_better_auth_tables.sql # better-auth core tables (user, session, account, etc.)
├── 0002_custom_tables.sql # Custom tables (conversation memory, tool execution)
└── 0003_add_jwks_table.sql # JWT key rotation table (better-auth v1.4.0)
MyMCP class: Extends McpAgent with your tools, resources, and promptsensureValidToken(): Automatically refreshes expired tokensauthorizedFetch(): Wrapper for API calls with authBetterAuthHandler: Hono app handling OAuth routes via better-authcreateAuth(): better-auth instance factory with D1 + DrizzleUtility Tools (no auth required):
| Name | Description |
|------|-------------|
| hello | Simple greeting |
| get_current_time | Current date/time in various timezones |
| generate_uuid | Generate UUID v4 (1-10) |
| base64 | Encode/decode Base64 strings |
| text_stats | Count words, characters, lines |
| random_number | Generate random numbers in range |
| json_format | Format/validate JSON |
| hash_text | Generate SHA-256 hash |
User Tools (require OAuth):
| Name | Description |
|------|-------------|
| get_user_info | Returns authenticated user's Google info |
| list_my_conversations | List your conversation history |
Example Tools:
| Name | Description |
|------|-------------|
| example_api_call | Demonstrates authorizedFetch() pattern |
Resources (read-only data):
| Name | Description |
|------|-------------|
| server_info | Server metadata and capabilities |
| user_profile | Authenticated user's profile |
Prompts (templates):
| Name | Description |
|------|-------------|
| summarize | Content summarization template |
| analyze | Content analysis template (sentiment/technical/business) |
The template includes optional D1-backed conversation memory for persistent chat history.
Setup:
# 1. Create D1 database
npx wrangler d1 create my-mcp-db
# 2. Add database_id to wrangler.jsonc d1_databases section
# 3. Run migrations
npx wrangler d1 execute my-mcp-db --local --file=migrations/0001_conversations.sql
npx wrangler d1 execute my-mcp-db --remote --file=migrations/0001_conversations.sql
# 4. Enable in wrangler.jsonc vars
"ENABLE_CONVERSATION_MEMORY": "true"
Configuration:
| Variable | Default | Description |
|----------|---------|-------------|
| ENABLE_CONVERSATION_MEMORY | false | Enable D1 conversation storage |
| CONVERSATION_TTL_HOURS | 168 | Auto-delete conversations after 7 days |
| MAX_CONTEXT_MESSAGES | 50 | Max messages to load for context |
When disabled, falls back to KV storage (backwards compatible).
The template includes an optional internal agent pattern for voice agents (e.g., ElevenLabs) and prompt injection protection.
When enabled, the server exposes an ask_agent tool that wraps all other tools behind a Workers AI gatekeeper.
Enable:
// In wrangler.jsonc vars
"ENABLE_INTERNAL_AGENT": "true",
"INTERNAL_AGENT_MODEL": "@cf/qwen/qwen2.5-coder-32b-instruct"
How it works:
ask_agent tool with natural language queryBenefits:
Configuration:
| Variable | Default | Description |
|----------|---------|-------------|
| ENABLE_INTERNAL_AGENT | false | Enable ask_agent tool |
| INTERNAL_AGENT_MODEL | @cf/qwen/qwen2.5-coder-32b-instruct | Workers AI gatekeeper model |
The template includes automatic token refresh:
authorizedFetch() calls ensureValidToken() before each requestThis prevents sessions from disconnecting after 1 hour (Google token expiry).
npx wrangler dev
# Test MCP endpoint (requires AUTH_TOKEN secret set)
curl -X POST "https://your-worker.workers.dev/mcp" \
-H "Authorization: Bearer YOUR_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'
@cloudflare/workers-oauth-provider - OAuth 2.0 provider for Workers@modelcontextprotocol/sdk - MCP protocol implementationagents - McpAgent base class with Durable Object integrationhono - Lightweight web framework for OAuth routeszod - Schema validation for tool parametersThe template includes multiple security layers:
XSS Protection:
Session Security:
SameSite=Strict cookies prevent CSRF attacksInput Validation:
Rate Limiting:
Access Control:
See docs/MCP_FEATURES_PLAN.md for planning around:
defer_loading for 85% token reduction (10+ tools)MIT License - See LICENSE for details.
Built by Jezweb — AI agents, MCP servers, and business automation.
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
ready
Auth
mcp, api_key, oauth
Streaming
Yes
Data region
global
Protocol support
Requires: mcp, lang:typescript, streaming
Forbidden: none
Guardrails
Operational confidence: medium
curl -s "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/snapshot"
curl -s "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract"
curl -s "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
83
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
80
A Model Context Protocol (MCP) server for GitLab
Traction
No public download signal
Freshness
Updated 2d ago
Rank
74
Expose OpenAPI definition endpoints as MCP tools using the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Rank
72
An actix_web backend for the official Rust SDK for the Model Context Protocol (https://github.com/modelcontextprotocol/rust-sdk)
Traction
No public download signal
Freshness
Updated 2d ago
Contract JSON
{
"contractStatus": "ready",
"authModes": [
"mcp",
"api_key",
"oauth"
],
"requires": [
"mcp",
"lang:typescript",
"streaming"
],
"forbidden": [],
"supportsMcp": true,
"supportsA2a": false,
"supportsStreaming": true,
"inputSchemaRef": "https://github.com/jezweb/google-calendar-mcp#input",
"outputSchemaRef": "https://github.com/jezweb/google-calendar-mcp#output",
"dataRegion": "global",
"contractUpdatedAt": "2026-02-24T19:45:40.612Z",
"sourceUpdatedAt": "2026-02-24T19:45:40.612Z",
"freshnessSeconds": 4435425
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"MCP"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_MCP",
"generatedAt": "2026-04-17T03:49:26.563Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "MCP",
"type": "protocol",
"support": "supported",
"confidenceSource": "contract",
"notes": "Confirmed by capability contract"
}
],
"flattenedTokens": "protocol:MCP|supported|contract"
}Facts JSON
[
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "MCP",
"href": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:45:40.612Z",
"isPublic": true
},
{
"factKey": "auth_modes",
"category": "compatibility",
"label": "Auth modes",
"value": "mcp, api_key, oauth",
"href": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:45:40.612Z",
"isPublic": true
},
{
"factKey": "schema_refs",
"category": "artifact",
"label": "Machine-readable schemas",
"value": "OpenAPI or schema references published",
"href": "https://github.com/jezweb/google-calendar-mcp#input",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:45:40.612Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Jezweb",
"href": "https://github.com/jezweb/google-calendar-mcp",
"sourceUrl": "https://github.com/jezweb/google-calendar-mcp",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-24T19:43:14.176Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/mcp-jezweb-google-calendar-mcp/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to google-calendar-mcp and adjacent AI workflows.