# Changelog

All notable changes to ToolsConnector are documented in this file.

The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.3.23](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.22...v0.3.23) (2026-08-01)


### 🐛 Bug Fixes

* **gmail:** return thread messages + add batched header listing ([#79](https://github.com/sachinshelke/ToolsConnector/issues/79)) ([#80](https://github.com/sachinshelke/ToolsConnector/issues/80)) ([b85952e](https://github.com/sachinshelke/ToolsConnector/commit/b85952e9fbec78ce289ca49361602c56a904f7a3))

## [0.3.22](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.21...v0.3.22) (2026-07-25)


### ✨ Features

* whatsapp connectors (Cloud API + link builder) + machine-readable auth across all 79 connectors ([#76](https://github.com/sachinshelke/ToolsConnector/issues/76)) ([648db7c](https://github.com/sachinshelke/ToolsConnector/commit/648db7c09ce0edfe65cc102ca33c4246b48e882a))

## [0.3.21](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.20...v0.3.21) (2026-06-24)


### ✨ Features

* live-verify ContactOut + Lusha to Tier 1, productize LinkedIn, lockstep SDK version ([#69](https://github.com/sachinshelke/ToolsConnector/issues/69)) ([bc19334](https://github.com/sachinshelke/ToolsConnector/commit/bc193343bcb0b0c898a214f05d5801955217ca04))

## [0.3.20](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.19...v0.3.20) (2026-06-19)


### ✨ Features

* multi-language SDK (Python/TS/Go from one binding IR) + Odoo connector ([#64](https://github.com/sachinshelke/ToolsConnector/issues/64)) ([6b13b6f](https://github.com/sachinshelke/ToolsConnector/commit/6b13b6ff9fa881c5dcbde4b3f29a409bd7e49fc7))

## [0.3.19](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.18...v0.3.19) (2026-06-13)


### 🐛 Bug Fixes

* **gemini:** replace upstream-retired model ids in examples/docs ([#62](https://github.com/sachinshelke/ToolsConnector/issues/62)) ([72146e1](https://github.com/sachinshelke/ToolsConnector/commit/72146e1a8e7ba259e160516e66c0c6f8fcbe8f6d))

## [0.3.18](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.17...v0.3.18) (2026-06-12)


### ✨ Features

* **stripe:** promote to Tier 1 — 38/40 live-verified + 2/40 envelope-verified (test mode) ([#58](https://github.com/sachinshelke/ToolsConnector/issues/58)) ([c7aa879](https://github.com/sachinshelke/ToolsConnector/commit/c7aa8799552cbda7df4c39e4bdc2cc5477c9d367))

## [0.3.17](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.16...v0.3.17) (2026-06-12)


### ✨ Features

* **gemini:** promote to Tier 1 — function calling, streaming, 20 actions live-verified ([#56](https://github.com/sachinshelke/ToolsConnector/issues/56)) ([474bfe6](https://github.com/sachinshelke/ToolsConnector/commit/474bfe6f4953b1fa0e0aea9e956c484f7084676c))

## [0.3.16](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.15...v0.3.16) (2026-06-06)


### 🐛 Bug Fixes

* security & quality hardening + CodeQL advanced setup (0 open) ([#53](https://github.com/sachinshelke/ToolsConnector/issues/53)) ([363ef3a](https://github.com/sachinshelke/ToolsConnector/commit/363ef3abf98fce30d0a114c7b2588d9e4abdffea))

## [0.3.15](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.14...v0.3.15) (2026-06-05)

Adds **5 AI/ML provider connectors** with **HuggingFace promoted to Tier 1 (live verified, 24/30 actions)**, plus two cross-cutting schema/MCP fixes. Catalog: 68 → 73 connectors, 1,402 → 1,518 actions; AI/ML category 3 → 8. ([#51](https://github.com/sachinshelke/ToolsConnector/pull/51), [ee2611a](https://github.com/sachinshelke/ToolsConnector/commit/ee2611a47c892b5bdaabf2d32db3de21f84b198a))

### ✨ Features

* **connectors:** add HuggingFace, Gemini, Cohere, Mistral, Groq AI providers (raw httpx + BYOK, no provider SDKs)
* **huggingface:** Tier-1 live verification (24/30 actions) + model/provider/pricing discovery — inference catalog with per-token pricing, provider mapping, repo file tree, and expandable model details
* **huggingface:** add `list_models` `pipeline_tag` / `library` filters for clean model discovery
* **runtime:** render multi-type union params as `anyOf` — unblocks batch inputs (HuggingFace/Mistral embeddings, Gemini structured `contents`)
* **serve:** honor `anyOf` unions in the MCP handler so batch lists pass over stdio (and `Optional[list[...]]` arrays advertise their item type)

### 🐛 Bug Fixes

* **huggingface:** zero-shot parser now handles the `hf-inference` router list shape; follow Hub `307` legacy-alias redirects for `get_model` / `get_dataset`
* **runtime:** `Optional[list[...]]` params were mis-typed as `string` (MCP clients sent a comma-string, iterated character-by-character) — they now emit `array` with inferred `items` element types + PEP 604 union robustness

## [0.3.14](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.13...v0.3.14) (2026-06-04)


### 🐛 Bug Fixes

* **serve:** drop None-valued optional args in aexecute so action defaults apply ([#49](https://github.com/sachinshelke/ToolsConnector/issues/49)) ([d40a402](https://github.com/sachinshelke/ToolsConnector/commit/d40a40203b80e3172165fe45be6f8f59768f4760))

## [0.3.13](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.12...v0.3.13) (2026-06-03)


### ✨ Features

* multi-language SDK spike (ADR [#17](https://github.com/sachinshelke/ToolsConnector/issues/17)), connector URL/pagination fixes, and error surfacing ([#47](https://github.com/sachinshelke/ToolsConnector/issues/47)) ([7da2e04](https://github.com/sachinshelke/ToolsConnector/commit/7da2e046dfc0fc4fc6bdc93fd9a3b410a74858f5))

## [0.3.12](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.11...v0.3.12) (2026-05-30)


### ✨ Features

* **site:** cinematic dark redesign + SEO/content/UX improvements ([#45](https://github.com/sachinshelke/ToolsConnector/issues/45)) ([e8c2bf0](https://github.com/sachinshelke/ToolsConnector/commit/e8c2bf056e0e8cb793cd1cc94c0a9a24898b7c84))

## [0.3.11](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.10...v0.3.11) (2026-05-29)


### ✨ Features

* promote Google Workspace suite to Tier 1 — 5 connectors live-verified + badge infra ([#37](https://github.com/sachinshelke/ToolsConnector/issues/37)) ([96247c9](https://github.com/sachinshelke/ToolsConnector/commit/96247c9f81114f4677d87d4f9b66578b10358e08))

## [0.3.10](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.9...v0.3.10) (2026-05-27)


### ✨ Features

* **github:** Tier 1 live verification + path-traversal fix + GH rate-limit detection ([#34](https://github.com/sachinshelke/ToolsConnector/issues/34)) ([61dec1e](https://github.com/sachinshelke/ToolsConnector/commit/61dec1eddac07002d9590355b9875d7ea8836d7c))

## [0.3.9](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.8...v0.3.9) (2026-05-23)


### ✨ Features

* **linear:** GraphQL injection fix + 7 audit-round hardening fixes + Tier 2 ([#31](https://github.com/sachinshelke/ToolsConnector/issues/31)) ([0f6a87b](https://github.com/sachinshelke/ToolsConnector/commit/0f6a87be72c2d41ce7bf1630f1c56b4a3886b606))


### 🐛 Bug Fixes

* **linear:** live-verification + deprecation sweep ([#33](https://github.com/sachinshelke/ToolsConnector/issues/33)) ([a08066c](https://github.com/sachinshelke/ToolsConnector/commit/a08066ce9962096389ad5a620a4122e70ab6d52a))

## [0.3.8](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.7...v0.3.8) (2026-05-14)


### ✨ Features

* **site:** show current package version on toolsconnector.github.io ([#29](https://github.com/sachinshelke/ToolsConnector/issues/29)) ([0691458](https://github.com/sachinshelke/ToolsConnector/commit/0691458742b54e507b161385398984dd5929ced9))

## [0.3.7](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.6...v0.3.7) (2026-05-14)


### ✨ Features

* **notion:** live-verify all 24 actions (Tier 1) + add get_me + comment CRUD ([#27](https://github.com/sachinshelke/ToolsConnector/issues/27)) ([ec39b9d](https://github.com/sachinshelke/ToolsConnector/commit/ec39b9dfc3836757cb8c9087e1f0580a478c19e5))

## [0.3.6](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.5...v0.3.6) (2026-05-01)


### 🐛 Bug Fixes

* **serve:** pass host/port to FastMCP() init, not run() ([#22](https://github.com/sachinshelke/ToolsConnector/issues/22)) ([#24](https://github.com/sachinshelke/ToolsConnector/issues/24)) ([da15ee7](https://github.com/sachinshelke/ToolsConnector/commit/da15ee7d7bd2f59a77ea6458b5e8a9e9ec59028b))

## [0.3.5](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.4...v0.3.5) (2026-05-01)


### ✨ Features

* **connectors:** adopt raise_typed_for_status across 42 HTTP connectors ([139865f](https://github.com/sachinshelke/ToolsConnector/commit/139865fd2cad3f952ff0d3d1146926d40d5c8689))
* **errors:** shared raise_typed_for_status helper for connector error mapping ([02913e9](https://github.com/sachinshelke/ToolsConnector/commit/02913e98c2b22580565aee7f1b734c17f99e8f4c))
* **gmail:** complete Gmail API v1 settings + push coverage (28 new actions) ([3895063](https://github.com/sachinshelke/ToolsConnector/commit/38950631195213d81b219fe12a80e341404e8a4f))
* **gmail:** send_email/create_draft/update_draft support multipart + attachments + headers ([b135107](https://github.com/sachinshelke/ToolsConnector/commit/b135107c0ae94bccced5638b19250e9fb1aaddc1))


### 🐛 Bug Fixes

* **audit:** 7 issues from a 12-round self-audit pass ([0d43e3e](https://github.com/sachinshelke/ToolsConnector/commit/0d43e3e7cb3d3619cb990cc6fb0f336d67daa5c9))


### ⚡ Performance

* **serve:** drop redundant requires_scope/dangerous prefixes from tool descriptions ([e1b4615](https://github.com/sachinshelke/ToolsConnector/commit/e1b4615131a712bf8b0f94166bbe1430456ff7d5))

## [0.3.4](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.3...v0.3.4) (2026-04-22)


### 🐛 Bug Fixes

* **ci:** chain release-please → publish-pypi via repository_dispatch ([42b6b51](https://github.com/sachinshelke/ToolsConnector/commit/42b6b51ef79febf5b7a38b549bf144cbcc421265))

## [0.3.3](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.2...v0.3.3) (2026-04-22)


### 🐛 Bug Fixes

* correct required-checks branch protection + sweep residual old contact email ([ca4300f](https://github.com/sachinshelke/ToolsConnector/commit/ca4300f65494d845b124d184e30da1b3cc864e0e))

## [0.3.2](https://github.com/sachinshelke/ToolsConnector/compare/v0.3.1...v0.3.2) (2026-04-22)


### 🐛 Bug Fixes

* **site:** correct repo URLs (ToolsConnector/ToolsConnector -&gt; sachinshelke/ToolsConnector) ([9f1909d](https://github.com/sachinshelke/ToolsConnector/commit/9f1909dfee1dfb00d8d35f34a80592999a369633))

## [0.3.0] - 2026-04-20

### Added

- **3 social publisher connectors** for content workflows. All endpoints,
  request bodies, headers, and OAuth scopes were verified against the
  actual canonical API docs (Microsoft Learn for LinkedIn,
  docs.x.com/x-api for X, github.com/Medium/medium-api-docs for Medium):

  - **`linkedin`** — 8 actions across the LinkedIn Versioned API and OIDC.

    Auth: OAuth 2.0 Bearer token. Scopes you'll need depend on the actions
    you call — `openid profile email` for `get_profile`, `w_member_social`
    for `create_post` / `delete_post` / `create_comment` / `react_to_post`,
    and the **RESTRICTED** `r_member_social` (LinkedIn-approved developers
    only) for `get_post` / `list_my_posts` / `list_comments`.

    Endpoints:
    - `GET /v2/userinfo` — get_profile (OIDC userinfo)
    - `POST /rest/posts` — create_post (with `Linkedin-Version: 202604`)
    - `DELETE /rest/posts/{urn}` — delete_post
    - `GET /rest/posts/{urn}` — get_post (RESTRICTED scope)
    - `GET /rest/posts?q=author&author=...` — list_my_posts (RESTRICTED scope)
    - `POST /rest/socialActions/{urn}/comments` — create_comment
    - `GET /rest/socialActions/{urn}/comments` — list_comments (RESTRICTED scope)
    - `POST /rest/reactions?actor={urn}` — react_to_post (actor as QUERY param,
      not body field; reaction types: LIKE / PRAISE / EMPATHY / INTEREST /
      APPRECIATION / ENTERTAINMENT — `MAYBE` deprecated in version 202307)

    Token expiry (60 days, plus the `EXPIRED_ACCESS_TOKEN` /
    `REVOKED_ACCESS_TOKEN` / `EMPTY_ACCESS_TOKEN` error markers) raises
    `TokenExpiredError` with a regenerate-token hint. Restricted-scope
    403s map to `PermissionDeniedError`. DMs / mentions / asset uploads
    are out of scope — they require LinkedIn Partner Program approval
    (a contract, not OAuth scopes).

  - **`x`** (Twitter) — 9 actions on the X API v2 (base
    `https://api.x.com/2`).

    Auth: OAuth 2.0 user-context Bearer token. Scopes per action:
    `tweet.read users.read` for `get_me` / `list_mentions`,
    `tweet.read tweet.write users.read` for tweet write actions,
    `like.write` for `like_tweet` / `unlike_tweet`,
    `dm.write` for `send_dm`. `offline.access` is optional (only for
    refresh tokens).

    Endpoints:
    - `GET /2/users/me` — get_me
    - `POST /2/tweets` — create_tweet, reply_to_tweet, create_thread
    - `DELETE /2/tweets/{id}` — delete_tweet (returns the `data.deleted`
      bool from X's response)
    - `POST /2/users/{id}/likes` — like_tweet (body `{tweet_id}`)
    - `DELETE /2/users/{id}/likes/{tweet_id}` — unlike_tweet
    - `GET /2/users/{id}/mentions` — list_mentions (cursor pagination
      via `pagination_token` ↔ `meta.next_token`)
    - `POST /2/dm_conversations/with/{participant_id}/messages` — send_dm

    The X tier policy (Free / Basic / Pro / Enterprise) is set by X's
    commercial policy and isn't formally per-endpoint in the OpenAPI spec.
    Tier-gated 403s (`client-not-enrolled`, `usage cap`, `client-forbidden`)
    map to `PermissionDeniedError` with a hint pointing at
    https://developer.x.com/en/products/twitter-api.

    `create_thread` posts sequentially with partial-success visibility:
    on failure, posted-so-far tweets are preserved on
    `e.details["posted_tweets"]`.

  - **`medium`** — 4 actions for publishing to personal feed and
    publications. Auth: Bearer integration token. **NOTE**: Medium API
    was deprecated for new tokens in 2023; this connector works only for
    users with existing legacy tokens. Comments and post listing are out
    of scope (Medium API does not provide them; RSS scraping rejected
    as TOS-violating).

- **`[publishers]` install bundle**: `pip install "toolsconnector[publishers]"`
  installs all three together for content-workflow agents.

- **`ConnectorCategory.SOCIAL`** put into active use for the first time
  (was reserved in the enum, now used by linkedin/x/medium).

- **End-to-end verification with respx**: every linkedin and x endpoint's
  HTTP method, path, query parameters, body shape, and error mapping was
  verified against mocks of the documented APIs before this release.

### Stats

- 68 connectors (↑ from 65), 1,370 actions (↑ from 1,349)
- All three new connectors register in `_KNOWN_CONNECTORS`, generate static
  HTML pages with JSON-LD + sitemap entries, and are MCP-served via the
  fixed JSON-Schema-derived handler signatures (#1).

## [0.2.1] - 2026-04-16

### Fixed

- **Critical MCP fix**: handler `__signature__` now built from the tool's JSON Schema instead
  of using bare `(**kwargs: Any)`. A `**kwargs` signature caused FastMCP to emit a single
  opaque `kwargs: object` parameter in the MCP schema and route all LLM arguments as
  `_handler(kwargs={...})` — wrapping args one level too deep, breaking every tool call with
  `TypeError: method() got an unexpected keyword argument 'kwargs'`.
  Affects both `ToolKit.serve_mcp()` and `MCPServer`. Closes #1.

## [0.2.0] - 2026-04-16

### Added

- **14 AWS connectors** — full infrastructure lifecycle management for AI agents:
  - `cloudfront` — 10 actions (distributions, invalidations, config)
  - `ecr` — 12 actions (repositories, images, lifecycle policies, auth tokens)
  - `ecs` — 25 actions (clusters, services, task definitions, tasks, capacity)
  - `ec2` — 30 actions (instances, security groups, key pairs, elastic IPs, VPCs, AMIs)
  - `alb` — 18 actions (load balancers, target groups, listeners, rules, health checks)
  - `route53` — 15 actions (hosted zones, DNS records, health checks)
  - `acm` — 10 actions (SSL certificates, validation, tagging)
  - `cloudwatch` — 20 actions (metrics, alarms, dashboards, log groups, log events)
  - `iam` — 20 actions (roles, policies, instance profiles, access keys, users)
  - `secrets_manager` — 12 actions (secrets CRUD, rotation, random password)
  - `rds` — 25 actions (DB instances, clusters, snapshots, replicas, subnet groups)
  - `lambda_connector` — 15 actions (functions, invocation, versions, aliases, permissions)
- **`connectors/_aws/` shared foundation** — zero duplication across all 14 AWS connectors:
  - `auth.py` — `AWSCredentials` + `parse_credentials()` supporting 5 input formats
    (JSON dict, colon-separated string, env vars, AWS profile, STS session token)
  - `signing.py` — generic `sign_v4(service=...)` (service was hardcoded `"s3"` before)
  - `client.py` — `AWSBaseClient` with 3 API patterns: REST, JSON Target, Query+XML
  - `errors.py` — structured AWS error parsing for JSON and XML error responses
  - `regions.py` — `get_endpoint()` with global service handling (IAM, Route53, CloudFront)
  - `xml_helpers.py` — generic XML parsing utilities
- **AWS install bundles**: `[aws-deploy]`, `[aws-infra]`, `[aws-monitor]`, `[aws-data]`, `[aws]`
- **New ConnectorCategory values**: `COMPUTE`, `NETWORKING`
- **Static documentation site**: 65 pre-generated connector pages at `/connectors/{name}/`
  with full action tables, JSON-LD structured data, and install instructions
- **SEO**: Open Graph, Twitter Cards, JSON-LD (SoftwareApplication + FAQPage), sitemap.xml,
  robots.txt, OG image (1200×630), per-route dynamic meta updates

### Changed

- S3 connector migrated to use shared `_aws/` signing and credential parsing
- SQS connector migrated to use shared `_aws/` signing (removed 82-line duplicate SigV4)
- `s3` and `sqs` extras no longer incorrectly list `boto3` as a dependency

### Fixed

- MCP server handler: renamed `_tn` → `tn` closure parameter — FastMCP rejected any
  parameter starting with `_`, causing `InvalidSignature` on all tool registrations

### Stats

- **65 connectors** (up from 53), **1,349 actions** (up from 1,137)
- **14 AWS connectors** covering the full deploy → operate → monitor lifecycle
- **Zero new external dependencies** — all AWS connectors use raw httpx + SigV4

## [0.1.0] - 2026-04-05

### Added

- Core primitive: spec/, runtime/, errors/, types/, keystore/
- BaseConnector abstract class with @action decorator
- Auto-generated JSON Schema from type hints and docstrings
- Sync/async bridge: write async, users get both sync and async
- Protocol adapter layer (REST, with GraphQL/SOAP reserved)
- Auth providers: API key, Bearer, OAuth2, Basic
- Middleware pipeline: auth, retry, rate limit, logging
- Pagination strategies: cursor, token, offset
- PaginatedList[T] generic type with auto-pagination
- FileRef + StorageBackend for file handling
- Pluggable KeyStore (InMemory, Environment, LocalFile)
- Full error hierarchy with structured to_dict() for AI consumption
- 53 connectors with 1,137 real actions:
  - Communication: Gmail, Slack, Discord, Outlook, Teams, Twilio, Telegram
  - Code: GitHub, GitLab
  - Project management: Jira, Asana, Linear, Trello
  - Knowledge: Notion, Confluence
  - CRM: HubSpot, Salesforce, Zendesk, Freshdesk, Intercom
  - Finance: Stripe, Plaid
  - Marketing: SendGrid, Mailchimp
  - Storage: Google Drive, S3
  - Database: Supabase, MongoDB, Airtable, Firestore, Redis
  - DevOps: Datadog, PagerDuty, Vercel, Cloudflare, Docker Hub
  - AI/ML: OpenAI, Anthropic, Pinecone
  - Analytics: Mixpanel, Segment
  - Message Queue: SQS, RabbitMQ
  - Security: Okta, Auth0
  - Productivity: Google Calendar, Calendly, Figma
  - E-commerce: Shopify
  - Custom: Generic Webhook
- Serve layer with ToolKit central object:
  - MCP server generation (stdio, SSE, streamable-http)
  - OpenAI function calling schema generator
  - Anthropic tool use schema generator
  - Google Gemini function declaration generator
  - tc CLI command (list, actions, execute, serve)
  - REST API exposure (optional starlette)
- Resilience:
  - Circuit breaker per connector (open/closed/half-open)
  - Pre-validation of arguments against JSON Schema
  - Graceful degradation (one connector fails, others continue)
  - Timeout budget cascading with deadline-aware retries
  - Auto token refresh on TokenExpiredError
  - Dry run mode for dangerous actions
  - Actionable error messages (what, why, how to fix)
  - Structured execution logging
- Tool filtering: include/exclude glob patterns, exclude_dangerous
- Enhanced tool descriptions with connector context prefix
- Agent Army Orchestrator (Claude Agent SDK)
- Architecture FAQ with 15 decision records
- CI/CD with GitHub Actions (lint, test, conformance, security)
