Repository navigation
feat(adapters): add read-only Qonto business banking adapter (#1013) - #1080
Conversation
…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
|
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.
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. |
|
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 |
|
Thanks @GallaGit, all in and right on time. CI is green and I hit the six routes on thirdparty.qonto.com with a dummy key. They all come back 401 "Invalid credentials" rather than 404, so the paths are right. Since nobody has run it against a real account yet, I pushed one small commit that keeps it out of the public catalog for now ( |
Summary
Adds a read-only Qonto business banking adapter (
fr/qonto.json), closes #1013 (October Challenge #997).What's included
packages/backend/src/adapters/fr/qonto.json: base URLhttps://thirdparty.qonto.com/v2, categorybanking, probeqonto_get_organization,API_KEYauth withAuthorization: {{QONTO_LOGIN}}:{{QONTO_SECRET_KEY}}(no Bearer, no Base64),requiredEnvVars: ["QONTO_LOGIN","QONTO_SECRET_KEY"],docsUrl.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[]andoperation_type[]are mapped inqueryParams, 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/organizationand/transactionsrun only withRUN_QONTO_LIVE=1(+QONTO_LOGIN,QONTO_SECRET_KEY,QONTO_STAGING_TOKEN, optionalQONTO_BASE_URL).packages/frontend/public/logos/connectors/qonto.svg(the wordmark Qonto serves on qonto.com).content/guides/en/qonto-to-mcp.mdxguide is not included in this PR (can follow up).catalog.ts; counts bumped 385 → 386 (adapter-count.mjs --check).Pending maintainer checks (not verified, no account)
Authorizationformat: docs sayAuthorization: {sign-in}:{secret-key}, "no Base64 encoding". Not tested with a real call./transactionsrefuse a call withoutbank_account_idoriban? Docs describe the list as "for the bank account identified by thebank_account_id/iban", but the OpenAPI excerpt does not mark either asrequired. The tool doesn't force either one; its description recommends passing one (fromqonto_get_organization) and says a call without them is pending verification.Checks run locally
node scripts/validate-adapters.mjs --warn: clean, no qonto warningsnode scripts/regenerate-catalog.mjs: donenode 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)eslinton the spec: cleanOut of scope
Money movement (transfers, beneficiaries, cards), write endpoints, attachment upload, OAuth2.
Closes #1013