Skip to content

feat(adapters): add read-only Qonto business banking adapter (#1013) - #1080

Open
GallaGit wants to merge 5 commits into
HelpCode-ai:mainfrom
GallaGit:feat/qonto-adapter-1013
Open

GallaGit wants to merge 5 commits into
HelpCode-ai:mainfrom
GallaGit:feat/qonto-adapter-1013

Conversation

@GallaGit

Copy link
Copy Markdown
Contributor

Summary

Adds a read-only Qonto business banking adapter (fr/qonto.json), closes #1013 (October Challenge #997).

⚠️ Unverified against the live API. I don't have a Qonto sandbox account (Developer Portal), so every endpoint, parameter and the auth header are taken from docs.qonto.com and have not been exercised with real credentials. Please mark it as unverified, as suggested.

What's included

  • packages/backend/src/adapters/fr/qonto.json: base URL https://thirdparty.qonto.com/v2, category banking, probe qonto_get_organization, API_KEY auth with Authorization: {{QONTO_LOGIN}}:{{QONTO_SECRET_KEY}} (no Bearer, no Base64), requiredEnvVars: ["QONTO_LOGIN","QONTO_SECRET_KEY"], docsUrl.
  • 7 GET tools: qonto_get_organization (/organization), qonto_list_transactions (/transactions), qonto_get_transaction (/transactions/{id}), qonto_list_client_invoices (/client_invoices), qonto_list_supplier_invoices (/supplier_invoices), qonto_list_clients (/clients), qonto_list_quotes (/quotes). filter[...], status[] and operation_type[] are mapped in queryParams, as in clockodo/sellsy.
  • instructions (~2,000 chars): how to get credentials, the auth format, a warning to assign the connector only to MCP servers whose users may see bank data, the workflow (organization → bank account id → transactions), pagination, and sandbox setup (https://thirdparty-sandbox.staging.qonto.co/v2 + X-Qonto-Staging-Token).
  • fr/qonto.live.spec.ts: static checks (base URL, auth template contains : and has no Bearer/Basic, GET only, documented paths, probe, sandbox note). Live calls to /organization and /transactions run only with RUN_QONTO_LIVE=1 (+ QONTO_LOGIN, QONTO_SECRET_KEY, QONTO_STAGING_TOKEN, optional QONTO_BASE_URL).
  • Logo packages/frontend/public/logos/connectors/qonto.svg (the wordmark Qonto serves on qonto.com).
  • The optional content/guides/en/qonto-to-mcp.mdx guide is not included in this PR (can follow up).
  • Regenerated catalog.ts; counts bumped 385 → 386 (adapter-count.mjs --check).

Pending maintainer checks (not verified, no account)

  • Exact Authorization format: docs say Authorization: {sign-in}:{secret-key}, "no Base64 encoding". Not tested with a real call.
  • Does /transactions refuse a call without bank_account_id or iban? Docs describe the list as "for the bank account identified by the bank_account_id / iban", but the OpenAPI excerpt does not mark either as required. The tool doesn't force either one; its description recommends passing one (from qonto_get_organization) and says a call without them is pending verification.

Checks run locally

  • node scripts/validate-adapters.mjs --warn: clean, no qonto warnings
  • node scripts/regenerate-catalog.mjs: done
  • node scripts/adapter-count.mjs --check: OK (386 adapters)
  • npx jest src/adapters/fr/qonto src/adapters/catalog src/adapters/mcp-adapter src/adapters/catalog-search: 6780 passed, 2 skipped (live)
  • eslint on the spec: clean

Out of scope

Money movement (transfers, beneficiaries, cards), write endpoints, attachment upload, OAuth2.

Closes #1013

…e-ai#1013)

Adds fr/qonto.json with 7 GET tools against the Qonto Business API v2
(login:secret-key Authorization header), a static + RUN_QONTO_LIVE=1
sandbox spec, the Qonto logo, regenerated catalog and bumped counts.

Closes HelpCode-ai#1013
…ode-ai#1013)

- soften bank_account_id/iban wording (recommended, pending verification)
- transactions: document completed-only default, add reversed, one status per call
- client invoices: add filter[updated_at_from/to]
- supplier invoices: use to_review instead of deprecated to_pay, expose query_fields
@helpcodeai

Copy link
Copy Markdown
Contributor

Thanks @GallaGit, this is a clean one: the auth format matches the docs, it's GET only, the bank data warning is in the instructions, and you were upfront about not having an account. Two small things.

  1. It conflicts with main now. Right now it's only package.json (the 0.29.0 release touched the line next to the description), but I'm merging a batch of new adapters today, so the counts in the READMEs, CITATION, glama.json, package.json and server.json will move again. Merge main after that and take whatever count main has plus one for Qonto.
  2. Since it's not tested live, please add a short "Unverified." paragraph to the instructions like the other untested adapters have (see de/cas-genesisworld.json), saying the auth header and the account requirement on /transactions still need a real account to confirm. Optional while you're there: encodePathParams: true on qonto_get_transaction.

The red e2e check is the Google Fonts download on the runner, not your change, so don't worry about it. It'll run again after your merge.

@GallaGit

Copy link
Copy Markdown
Contributor Author

Thanks @helpcodeai! I'll wait for today's adapter batch to land, then merge main tonight (taking main's count +1 for Qonto) and add the Unverified. paragraph plus encodePathParams: true on qonto_get_transaction. I'll start around 21:30 CEST and expect to push by ~22:00 CEST (20:00 UTC).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🎃 New adapter: Qonto business banking (read-only)

2 participants