{"id":29189306,"url":"https://github.com/inference-gateway/google-calendar-agent","last_synced_at":"2026-05-24T16:01:40.689Z","repository":{"id":297822967,"uuid":"998006364","full_name":"inference-gateway/google-calendar-agent","owner":"inference-gateway","description":"A2A agent server enabling Google Calendar scheduling, retrieval, and automation","archived":false,"fork":false,"pushed_at":"2026-05-21T09:17:26.000Z","size":485,"stargazers_count":17,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-21T17:12:42.436Z","etag":null,"topics":["a2a","a2a-protocol","calendar","go","golang","google","google-calendar","google-calendar-api","inference-gateway"],"latest_commit_sha":null,"homepage":"https://registry.inference-gateway.com/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inference-gateway.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-06-07T17:04:52.000Z","updated_at":"2026-05-21T09:17:30.000Z","dependencies_parsed_at":"2025-07-20T00:12:29.529Z","dependency_job_id":"aa855262-8a23-4fca-a8e3-d600a33cb47a","html_url":"https://github.com/inference-gateway/google-calendar-agent","commit_stats":null,"previous_names":["inference-gateway/google-calendar-agent"],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/inference-gateway/google-calendar-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inference-gateway%2Fgoogle-calendar-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inference-gateway%2Fgoogle-calendar-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inference-gateway%2Fgoogle-calendar-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inference-gateway%2Fgoogle-calendar-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inference-gateway","download_url":"https://codeload.github.com/inference-gateway/google-calendar-agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inference-gateway%2Fgoogle-calendar-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33440447,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-24T13:13:05.286Z","status":"ssl_error","status_checked_at":"2026-05-24T13:13:03.728Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a","a2a-protocol","calendar","go","golang","google","google-calendar","google-calendar-api","inference-gateway"],"created_at":"2025-07-01T23:01:47.300Z","updated_at":"2026-05-24T16:01:40.683Z","avatar_url":"https://github.com/inference-gateway.png","language":"Go","funding_links":[],"categories":["⚙️ Implementations \u0026 Libraries","Agents"],"sub_categories":["Productivity \u0026 Calendar"],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Google-Calendar-Agent\n\n[![CI](https://github.com/inference-gateway/google-calendar-agent/workflows/CI/badge.svg)](https://github.com/inference-gateway/google-calendar-agent/actions/workflows/ci.yml)\n[![Go Report Card](https://img.shields.io/badge/Go%20Report%20Card-A+-brightgreen?style=flat\u0026logo=go\u0026logoColor=white)](https://goreportcard.com/report/github.com/inference-gateway/google-calendar-agent)\n[![Go Version](https://img.shields.io/badge/Go-1.26.2+-00ADD8?style=flat\u0026logo=go)](https://golang.org)\n[![A2A Protocol](https://img.shields.io/badge/A2A-Protocol-blue?style=flat)](https://github.com/inference-gateway/adk)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\n**A Google Calendar A2A agent for AI assistants to interact with Google Calendar**\n\nA enterprise-ready [Agent-to-Agent (A2A)](https://github.com/inference-gateway/adk) server that provides AI-powered capabilities through a standardized protocol.\n\n\u003c/div\u003e\n\n## Quick Start\n\nThe generated binary is a CLI. `start` boots the A2A server; `--help` and\n`--version` work as you'd expect.\n\n```bash\n# Run the agent\ngo run . start\n\n# Or build and invoke the CLI directly\ntask build\n./bin/google-calendar-agent --help\n./bin/google-calendar-agent --version\n./bin/google-calendar-agent start\n\n# Or with Docker\ndocker build -t google-calendar-agent .\ndocker run -p 8080:8080 google-calendar-agent\n```\n\n### CLI\n\n| Command | Description |\n|---------|-------------|\n| `google-calendar-agent start` | Start the A2A server (blocks until SIGINT/SIGTERM) |\n| `google-calendar-agent --help` | Show top-level help (and per-subcommand with `\u003ccmd\u003e --help`) |\n| `google-calendar-agent --version` | Print the embedded version and exit |\n\n## Quick Install\n\nAdd this agent to your Inference Gateway CLI:\n\n```bash\ninfer agents add google-calendar-agent http://localhost:8080 \\\n  --oci ghcr.io/inference-gateway/google-calendar-agent:latest \\\n  --run\n```\n\n## Features\n\n- ✅ A2A protocol compliant\n- ✅ AI-powered capabilities\n- ✅ Streaming support\n- ✅ Enterprise-ready\n- ✅ Minimal dependencies\n\n## Endpoints\n\n- `GET /.well-known/agent-card.json` - Agent metadata and capabilities\n- `GET /health` - Health check endpoint\n- `POST /a2a` - A2A protocol endpoint\n\n## Available Tools\n\n| Tool | Description | Parameters |\n|------|-------------|------------|\n| `Read` | Read a file from disk. Returns its contents, optionally sliced by line offset/limit. Use this to load SKILL.md bodies on demand. | file_path, offset, limit |\n| `list_calendar_events` | List upcoming events from Google Calendar | maxResults, query, timeMax, timeMin |\n| `create_calendar_event` | Create a new event in Google Calendar | attendees, description, endTime, location, startTime, summary |\n| `update_calendar_event` | Update an existing event in Google Calendar | description, endTime, eventId, location, startTime, summary |\n| `delete_calendar_event` | Delete an event from Google Calendar | eventId |\n| `get_calendar_event` | Get details of a specific event from Google Calendar | eventId |\n| `find_available_time` | Find available time slots in the calendar | duration, endDate, startDate |\n| `check_conflicts` | Check for scheduling conflicts in the specified time range | endTime, startTime |\n| `get_current_datetime` | Return the current date/time and the user's IANA timezone. Call this FIRST for any time-relative request (today, tomorrow, next Friday) before emitting RFC3339 timestamps to other calendar tools, so events land in the user's local timezone instead of an LLM-assumed default. | None |\n\n## Skills (loaded into the system prompt)\n\n| Skill | Description | Source |\n|-------|-------------|--------|\n| `schedule-meeting` | Use this when the user asks to schedule a meeting, book a slot, or find a time that works. Resolves a conflict-free booking by finding open slots, validating no overlap, and creating the event. | bare scaffold (`skills/schedule-meeting.md`) |\n\n## Configuration\n\nConfigure the agent via environment variables:\n\n### Custom Configuration\n\nThe following custom configuration variables are available. Defaults are\nderived from `spec.config.*` in `agent.yaml`; the env vars below override\nthem at runtime.\n\n| Category | Variable | Default |\n|----------|----------|---------|\n| **Google** | `GOOGLE_CREDENTIALS_PATH` | `` |\n| **Google** | `GOOGLE_SERVICE_ACCOUNT_JSON` | `` |\n| **GoogleCalendar** | `GOOGLE_CALENDAR_ID` | `primary` |\n| **GoogleCalendar** | `GOOGLE_CALENDAR_MOCK_MODE` | `false` |\n| **GoogleCalendar** | `GOOGLE_CALENDAR_TIMEZONE` | `UTC` |\n| **Tools** | `TOOLS_READ_ENABLED` | `true` |\n| **Tools** | `TOOLS_READ_MAX_LINES` | `2000` |\n\n### Environment Variables\n\n| Category | Variable | Description | Default |\n|----------|----------|-------------|---------|\n| **Server** | `A2A_PORT` | Server port | `8080` |\n| **Server** | `A2A_DEBUG` | Enable debug mode | `false` |\n| **Server** | `A2A_AGENT_URL` | Agent URL for internal references | `http://localhost:8080` |\n| **Server** | `A2A_STREAMING_STATUS_UPDATE_INTERVAL` | Streaming status update frequency | `1s` |\n| **Server** | `A2A_SERVER_READ_TIMEOUT` | HTTP server read timeout | `120s` |\n| **Server** | `A2A_SERVER_WRITE_TIMEOUT` | HTTP server write timeout | `120s` |\n| **Server** | `A2A_SERVER_IDLE_TIMEOUT` | HTTP server idle timeout | `120s` |\n| **Server** | `A2A_SERVER_DISABLE_HEALTHCHECK_LOG` | Disable logging for health check requests | `true` |\n| **Agent Metadata** | `A2A_AGENT_CARD_FILE_PATH` | Path to agent card JSON file | `.well-known/agent-card.json` |\n| **LLM Client** | `A2A_AGENT_CLIENT_PROVIDER` | LLM provider (`openai`, `anthropic`, `azure`, `ollama`, `deepseek`) |`` |\n| **LLM Client** | `A2A_AGENT_CLIENT_MODEL` | Model to use |`` |\n| **LLM Client** | `A2A_AGENT_CLIENT_API_KEY` | API key for LLM provider | - |\n| **LLM Client** | `A2A_AGENT_CLIENT_BASE_URL` | Custom LLM API endpoint | - |\n| **LLM Client** | `A2A_AGENT_CLIENT_TIMEOUT` | Timeout for LLM requests | `30s` |\n| **LLM Client** | `A2A_AGENT_CLIENT_MAX_RETRIES` | Maximum retries for LLM requests | `3` |\n| **LLM Client** | `A2A_AGENT_CLIENT_MAX_CHAT_COMPLETION_ITERATIONS` | Max chat completion rounds | `10` |\n| **LLM Client** | `A2A_AGENT_CLIENT_MAX_TOKENS` | Maximum tokens for LLM responses |`4096` |\n| **LLM Client** | `A2A_AGENT_CLIENT_TEMPERATURE` | Controls randomness of LLM output |`0.7` |\n| **Capabilities** | `A2A_CAPABILITIES_STREAMING` | Enable streaming responses | `true` |\n| **Capabilities** | `A2A_CAPABILITIES_PUSH_NOTIFICATIONS` | Enable push notifications | `false` |\n| **Capabilities** | `A2A_CAPABILITIES_STATE_TRANSITION_HISTORY` | Track state transitions | `false` |\n| **Task Management** | `A2A_TASK_RETENTION_MAX_COMPLETED_TASKS` | Max completed tasks to keep (0 = unlimited) | `100` |\n| **Task Management** | `A2A_TASK_RETENTION_MAX_FAILED_TASKS` | Max failed tasks to keep (0 = unlimited) | `50` |\n| **Task Management** | `A2A_TASK_RETENTION_CLEANUP_INTERVAL` | Cleanup frequency (0 = manual only) | `5m` |\n| **Storage** | `A2A_QUEUE_PROVIDER` | Storage backend (`memory` or `redis`) | `memory` |\n| **Storage** | `A2A_QUEUE_URL` | Redis connection URL (when using Redis) | - |\n| **Storage** | `A2A_QUEUE_MAX_SIZE` | Maximum queue size | `100` |\n| **Storage** | `A2A_QUEUE_CLEANUP_INTERVAL` | Task cleanup interval | `30s` |\n| **Authentication** | `A2A_AUTH_ENABLE` | Enable OIDC authentication | `false` |\n\n## Development\n\n```bash\n# Generate code from ADL\ntask generate\n\n# Run tests\ntask test\n\n# Build the application\ntask build\n\n# Run linter\ntask lint\n\n# Format code\ntask fmt\n```\n\n### Adding Dependencies\n\nThe generator owns the baseline toolchain pins (SDK, server framework,\nlogging, CLI, sandbox utilities). To extend the project without forking\nthe templates, declare extras in `agent.yaml` — every empty list below\nis rendered by `adl init --defaults` precisely so it's discoverable:\n\n| Where | Purpose | Example entry | Rendered into |\n|-------|---------|---------------|---------------|\n| `spec.language.go.vendor.deps` | Runtime Go modules | `github.com/stretchr/testify@v1.10.0` | `go.mod` `require` block |\n| `spec.language.go.vendor.devdeps` | Executable dev tools (Go 1.24 `tool` directive) | `golang.org/x/tools/cmd/stringer@v0.20.0` | `go.mod` `tool` directive |\n| `spec.development.deps` | Cross-cutting sandbox tools (not tied to one language) | `kubectl@1.31.0`, `terraform@1.9.5`, `deno@2.1.4` | Flox `manifest.toml` / devcontainer feature |\n\nEntries use the `\u003cpackage\u003e@\u003cversion\u003e` form. Built-in pins always win on\nconflict; the generator prints a warning and skips the user entry when\nshadowing is attempted. After editing `agent.yaml`, re-run `task generate`\nto refresh the manifests.\n\n### Debugging\n\nUse the [A2A Debugger](https://github.com/inference-gateway/a2a-debugger) to test and debug your A2A agent during development. It provides a web interface for sending requests to your agent and inspecting responses, making it easier to troubleshoot issues and validate your implementation.\n\n```bash\ndocker run --rm -it --network host ghcr.io/inference-gateway/a2a-debugger:latest --server-url http://localhost:8080 tasks submit \"What are your skills?\"\n```\n\n```bash\ndocker run --rm -it --network host ghcr.io/inference-gateway/a2a-debugger:latest --server-url http://localhost:8080 tasks list\n```\n\n```bash\ndocker run --rm -it --network host ghcr.io/inference-gateway/a2a-debugger:latest --server-url http://localhost:8080 tasks get \u003ctask ID\u003e\n```\n\n## Deployment\n\n### Docker\n\nThe Docker image can be built with custom version information using build arguments:\n\n```bash\n# Build with default values from ADL\ndocker build -t google-calendar-agent .\n\n# Build with custom version information\ndocker build \\\n  --build-arg VERSION=1.2.3 \\\n  --build-arg AGENT_NAME=\"My Custom Agent\" \\\n  --build-arg AGENT_DESCRIPTION=\"Custom agent description\" \\\n  -t google-calendar-agent:1.2.3 .\n```\n\n**Available Build Arguments:**\n\n- `VERSION` - Agent version (default: `0.4.27`)\n- `AGENT_NAME` - Agent name (default: `google-calendar-agent`)\n- `AGENT_DESCRIPTION` - Agent description (default: `A Google Calendar A2A agent for AI assistants to interact with Google Calendar`)\n\nThese values are embedded into the binary at build time using linker flags, making them accessible at runtime without requiring environment variables.\n\n## License\n\nApache 2.0 License - see LICENSE file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finference-gateway%2Fgoogle-calendar-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finference-gateway%2Fgoogle-calendar-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finference-gateway%2Fgoogle-calendar-agent/lists"}