🎃 Export a single connector as JSON or YAML, and accept YAML on import
Maintainer antworten meist innerhalb von 1 Tag
@keysersoft arbeitet bereits daran.
Seit 05.10.2026.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 65/100
- Issue-Typ
- Feature
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- typescript
- Bereich
- backend-api-design, documentation, frontend
Rechercherichtung
Start with exportAll(), findOne(), and importAll() in packages/backend/src/connectors/connectors.controller.ts, plus the secrets helpers and round-trip tests named in the issue. Then inspect handleExportAll/handleImportAll and the connector page header actions; run the specified backend and frontend tests. Done means secure JSON/YAML export and YAML import work, with the API reference and REST docs updated.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Part of the October Challenge #846.
Why
Today you can only back up all connectors at once (Export on the Connectors page). That works for backups, but not for sharing one hand-built connector with a colleague, attaching it to a bug report, or keeping it in Git. For Git, YAML diffs better than JSON. Users ask for "export this connector" from the connector page, and for a format they can review in a pull request.
Self-hosted vs Cloud
- Self-hosted: available in Community and Business, no licence gate.
- Cloud (
DEPLOYMENT_MODE=cloud): same behaviour. Import still goes through the existing licence/trial check per connector (licenseGuard.checkCanCreateConnector), so Cloud plan limits apply unchanged. Do not touch them. - Who can use it: export is available to any member who can open the connector (same check as
GET /api/connectors/:id, i.e.assertOrgMatch; VIEWER included). This is safe only because the single-connector export never contains secrets, whatever the role (see below). Import keeps today's rule: VIEWER is refused (assertCanCreate). All reads and writes are scoped toreq.user.organizationId.
What to build
- Backend:
GET /api/connectors/:id/export?format=json|yaml(defaultjson).- Return the same envelope as export-all (
{ version: '1.0', exportedAt, secretsIncluded: false, connectors: [ … ] }) with one connector. That way the existingPOST /api/connectors/import-allrestores it unchanged. - Secrets are always redacted, also for ADMIN: build the connector with
toPublicConnector()(env vars and headers emptied and listed inmaskedEnvVars/maskedHeaders;authConfigdropped). - Defence in depth, because a shared file travels further than a backup:
- strip
user:password@frombaseUrlwhenisSecretValue(baseUrl)(database connectors use connection strings); - empty any tool
endpointMapping.headersvalue whose name passesisSecretName()or whose value passesisSecretValue()(a cURL import stores literal headers such asX-Api-Key).
- strip
format=yaml: serialize withjs-yaml(already a backend dependency) usingdump(data, { noRefs: true }). Respond withContent-Type: application/yamlandContent-Disposition: attachment; filename="<slug>.anythingmcp.yaml"(or.json).- Optional, cheap: accept the same
formatquery onGET export-all.
- Return the same envelope as export-all (
- Frontend: connector page (
connectors/[id]/page.tsx): an Export button in the header actions with a small JSON/YAML choice. It downloads the file using the same Blob pattern ashandleExportAll. - Frontend: import dialog (
connectors/page.tsx): accept.json,.yaml,.yml. If the text does not start with{or[, parse it as YAML withjs-yamlload(text, { schema: JSON_SCHEMA })(addjs-yamlto the frontend). JSON_SCHEMA means no custom tags and no!!js/*. Then send the same JSON body as today. Show a clear error for invalid YAML. Update the dialog text ("JSON or YAML").
Where to look
packages/backend/src/connectors/connectors.controller.ts:827:exportAll(). Copy the field list; note that export-all can include secrets for an ADMIN backup (secretsIncluded), which the single export must never do.packages/backend/src/connectors/connectors.controller.ts:879:findOne(), the access check to reuse. Declare the new route so it does not clash with:id.packages/backend/src/connectors/connectors.controller.ts:1337:importAll()andImportAllDto(line 493). It already accepts the envelope and themasked*fields.packages/backend/src/connectors/connector-secrets.util.ts:77,:85,:267:isSecretName,isSecretValue,toPublicConnector.packages/backend/src/connectors/connectors.import-all.spec.ts:116: the export → import round-trip tests. Copy this pattern.packages/frontend/src/app/connectors/page.tsx:140:handleExportAll/handleImportAll(line 162) / import dialog (line 270ff,accept=".json").packages/frontend/src/app/connectors/[id]/page.tsx:753: header actions (Test / Edit / Delete).packages/frontend/src/lib/api.ts:422:connectors.exportAll/importAllclients.
Acceptance criteria
- Exporting a connector with secret env vars, a secret header, a
postgres://u:p@hostbase URL and a tool with a literalX-Api-Keyheader produces a file without any of those values, also for an ADMIN (unit test). - The JSON and YAML exports both re-import through
import-allinto an identical connector (minus secrets); round-trip test next toconnectors.import-all.spec.ts. - Another organization's connector id returns 403/404, never data.
- Importing a
.yamlfile works from the dialog. A YAML file with!!js/functionis rejected. Playwright test inpackages/frontend/tests/e2e/(runnpm run test:e2e -w packages/frontend). - Backend tests pass:
cd packages/backend && npx jest src/connectors. - Docs: the new endpoint (and the existing
export-all/import-all, which are missing) added to the connectors table indocs/api-reference.md(around line 85); a short "Share a single connector" note indocs/connectors/rest.md.
Out of scope
- Including secrets in single exports (even as an opt-in).
- Overwriting or merging into an existing connector on import (duplicates are still skipped by name).
- Changing the export-all secret behaviour for admins.
Size
M (1–2 days)
How to claim
Comment "I'd like to work on this" and we'll assign you. Rules in #846.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 856
- Forks
- 82
- Ø Merge
- 7 Std. 48 Min.
- Gemergte PRs (30 T.)
- 274
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus HelpCode-ai/anythingmcp
-
good first issue hacktoberfest
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 70/100
HelpCode-ai/anythingmcp#996 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement good first issue hacktoberfest help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
HelpCode-ai/anythingmcp#982 · 10 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Translate the rest of the admin UI (DE, IT)Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 38/100
HelpCode-ai/anythingmcp#1271 ·
Maintainer antworten meist innerhalb von 1 Tag
-
DATABASE connectors keep a connection-string password in plaintext and return it to the browserEvtl. vergeben @Riteesh-2k6 hat das vor 2 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
HelpCode-ai/anythingmcp#1245 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Write example prompts and a FAQ for the German ERP satellites (JTL-Wawi, Haufe X360, Sage 100)Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offengood first issue hacktoberfest
Schwierigkeit 3/5 Ein halber Tag Anfängerfreundlichkeit 82/100
HelpCode-ai/anythingmcp#1243 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in HelpCode-ai/anythingmcp
Ähnliche Issues
-
e2e-failure ready-to-code
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 79/100
redhat-developer/rhdh-plugin-export-overlays#4580 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
devdotfast/whiteboard#1415 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/sessions comp/desktop desktop/sessions P2 type/bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
NousResearch/hermes-agent#145383 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement p2 setup
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
vercel/eve#5419 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag