@zackbart/connecta 0.34.1 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +363 -0
- package/README.md +62 -106
- package/SECURITY.md +3 -2
- package/bin/connecta.mjs +41 -16
- package/bin/version.mjs +1 -1
- package/dist/access-tokens.d.ts +2 -1
- package/dist/access-tokens.js +66 -30
- package/dist/activity.d.ts +1 -1
- package/dist/activity.js +2 -0
- package/dist/agent-config.d.ts +23 -0
- package/dist/agent-config.js +59 -0
- package/dist/agent-description.js +16 -0
- package/dist/agent-identity.js +4 -4
- package/dist/agent-observation.js +39 -0
- package/dist/auth/clerk-sdk/client.d.ts +2 -0
- package/dist/auth/clerk-sdk/generated.js +554 -563
- package/dist/auth/clerk-transport.js +70 -3
- package/dist/auth/clerk.d.ts +13 -0
- package/dist/auth/clerk.js +653 -246
- package/dist/auth/cloudflare-access.js +46 -42
- package/dist/auth/downstream-client-metadata.js +2 -2
- package/dist/auth/downstream-oauth.js +2051 -1160
- package/dist/auth/downstream-revocation.js +88 -88
- package/dist/auth/native-call.js +20 -0
- package/dist/auth/native.js +184 -0
- package/dist/auth/oauth-start-reset.js +11 -5
- package/dist/auth/oauth-token-response.js +121 -102
- package/dist/auth/oauth-v2-migration.js +97 -78
- package/dist/auth/renewable-grant.js +10 -0
- package/dist/auth/static-oauth.js +663 -271
- package/dist/auth/vercel-agent.js +266 -0
- package/dist/auth-admission.js +204 -0
- package/dist/auth-elicitation.js +350 -241
- package/dist/authorization-handoff.js +164 -90
- package/dist/call-admission-context.js +3 -10
- package/dist/call-admission.js +2 -0
- package/dist/call-classification.js +9 -0
- package/dist/call-recovery.js +32 -13
- package/dist/canonical-json.js +8 -0
- package/dist/catalog-cache.js +369 -213
- package/dist/catalog-service.js +659 -530
- package/dist/catalog.js +5 -1
- package/dist/concurrency.js +0 -25
- package/dist/config-defaults.d.ts +1 -0
- package/dist/config-defaults.js +1 -0
- package/dist/config-schema.d.ts +3 -1
- package/dist/config-schema.js +13 -3
- package/dist/config.d.ts +40 -6
- package/dist/config.js +40 -26
- package/dist/connector-caller.d.ts +4 -0
- package/dist/connector-caller.js +17 -4
- package/dist/connectors/api-connector.d.ts +12 -7
- package/dist/connectors/api-connector.js +142 -56
- package/dist/connectors/guarded-fetch.d.ts +51 -17
- package/dist/connectors/guarded-fetch.js +215 -121
- package/dist/connectors/negotiation-cache.js +20 -10
- package/dist/connectors/remote-mcp.d.ts +10 -30
- package/dist/connectors/remote-mcp.js +955 -563
- package/dist/d1.js +10 -243
- package/dist/derived-context.js +5 -0
- package/dist/describe-config.d.ts +3 -1
- package/dist/describe-config.js +2 -0
- package/dist/downstream-input.js +347 -260
- package/dist/errors.d.ts +87 -6
- package/dist/errors.js +114 -4
- package/dist/execute.js +87 -50
- package/dist/executor-admission.js +3 -0
- package/dist/executors/quickjs.js +163 -112
- package/dist/guarded-transport.js +50 -0
- package/dist/guest-runtime.js +1 -1
- package/dist/http/client.js +439 -0
- package/dist/http/errors.js +558 -0
- package/dist/http/fields.js +49 -0
- package/dist/http/hatch-paging.js +318 -0
- package/dist/http/hatch.js +1279 -0
- package/dist/http/json-schema.js +267 -0
- package/dist/http/node-transport.js +241 -0
- package/dist/http/oauth.js +162 -0
- package/dist/http/paging.js +228 -0
- package/dist/http/provider.js +221 -0
- package/dist/http/safety.js +82 -0
- package/dist/http/services.js +79 -0
- package/dist/http/tools.js +383 -0
- package/dist/http/vendor-index.js +138 -0
- package/dist/http/vendor.js +448 -0
- package/dist/http/write-request.js +66 -0
- package/dist/http-policy.d.ts +11 -0
- package/dist/http-policy.js +45 -0
- package/dist/inbound-credential.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -0
- package/dist/invocation-auth.js +30 -19
- package/dist/invocation.js +218 -85
- package/dist/mcp-result.js +0 -4
- package/dist/membership.d.ts +4 -0
- package/dist/meta-output.js +1 -1
- package/dist/meta-tools.js +531 -406
- package/dist/native-recovery.js +52 -0
- package/dist/native-tools.js +382 -0
- package/dist/node.d.ts +4 -3
- package/dist/node.js +45 -8
- package/dist/oauth-handoff.js +177 -104
- package/dist/oauth-partition.js +6 -20
- package/dist/oauth-sealing.js +6 -7
- package/dist/operation-vocabulary.js +101 -0
- package/dist/operator-record.d.ts +2 -2
- package/dist/operator-record.js +17 -4
- package/dist/operator-ui/agents.d.ts +5 -4
- package/dist/operator-ui/agents.js +17 -7
- package/dist/operator-ui/config-summary.js +5 -4
- package/dist/operator-ui/connection-map.js +7 -5
- package/dist/operator-ui/contract.d.ts +7 -3
- package/dist/operator-ui/endpoints.js +4 -13
- package/dist/operator-ui/fix-prompts.d.ts +1 -1
- package/dist/operator-ui/fix-prompts.js +0 -8
- package/dist/operator-ui/generated.js +3 -3
- package/dist/operator-ui/model.d.ts +2 -3
- package/dist/operator-ui/overview.js +5 -2
- package/dist/operator-ui/setup-commands.js +0 -4
- package/dist/operator-ui/view.d.ts +2 -25
- package/dist/operator-ui/view.js +2 -76
- package/dist/program-writes.js +47 -26
- package/dist/provider-call-facts.d.ts +115 -0
- package/dist/provider-call-facts.js +182 -0
- package/dist/provider-call.d.ts +112 -0
- package/dist/provider-call.js +271 -0
- package/dist/provider.d.ts +65 -31
- package/dist/provider.js +116 -39
- package/dist/providers/_shared/google/hatch.js +91 -0
- package/dist/providers/_shared/google/kit.js +537 -0
- package/dist/providers/_shared/google/result-size.js +15 -2
- package/dist/providers/_shared/google/service-account.d.ts +2 -1
- package/dist/providers/_shared/google/service-account.js +8 -4
- package/dist/providers/_shared/google/workspace.d.ts +6 -210
- package/dist/providers/_shared/google/workspace.js +6 -425
- package/dist/providers/_shared/rest/compact-index.js +86 -0
- package/dist/providers/_shared/rest/dispatch.js +3 -23
- package/dist/providers/_shared/rest/kit.js +546 -0
- package/dist/providers/_shared/rest/operation-index.js +230 -14
- package/dist/providers/_shared/rest/response-media.js +11 -0
- package/dist/providers/_shared/rest/tools.js +101 -78
- package/dist/providers/_shared/rest/value-safety.js +353 -195
- package/dist/providers/_shared/sensitive-fields.js +27 -0
- package/dist/providers/breeze/api.js +584 -0
- package/dist/providers/breeze/index.d.ts +1 -3
- package/dist/providers/breeze/index.js +67 -1420
- package/dist/providers/breeze/openapi.generated.js +60 -0
- package/dist/providers/breeze/skill.generated.js +2 -6
- package/dist/providers/breeze/tools.js +696 -0
- package/dist/providers/ccb/api.js +496 -0
- package/dist/providers/ccb/index.d.ts +15 -37
- package/dist/providers/ccb/index.js +77 -1702
- package/dist/providers/ccb/lib/constants.d.ts +34 -0
- package/dist/providers/ccb/lib/constants.js +74 -0
- package/dist/providers/ccb/lib/guide.js +9 -0
- package/dist/providers/ccb/lib/verdicts.js +387 -0
- package/dist/providers/ccb/openapi.generated.js +397 -0
- package/dist/providers/ccb/safety.js +295 -0
- package/dist/providers/ccb/skill.generated.js +2 -6
- package/dist/providers/ccb/tools.js +853 -0
- package/dist/providers/cloudflare/api.js +1066 -0
- package/dist/providers/cloudflare/index.d.ts +5 -22
- package/dist/providers/cloudflare/index.js +79 -197
- package/dist/providers/cloudflare/lib/config.d.ts +16 -0
- package/dist/providers/cloudflare/lib/config.js +2 -0
- package/dist/providers/cloudflare/lib/discovery.js +29 -0
- package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
- package/dist/providers/cloudflare/lib/hatch.js +103 -0
- package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
- package/dist/providers/cloudflare/lib/response-media.js +75 -0
- package/dist/providers/cloudflare/openapi.generated.js +4 -3
- package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
- package/dist/providers/cloudflare/skill.generated.js +2 -10
- package/dist/providers/cloudflare/tools.js +360 -0
- package/dist/providers/docs/api.js +51 -0
- package/dist/providers/docs/index.d.ts +1 -12
- package/dist/providers/docs/index.js +53 -1165
- package/dist/providers/docs/lib/constants.d.ts +18 -0
- package/dist/providers/docs/lib/constants.js +18 -0
- package/dist/providers/docs/lib/discovery.js +26 -0
- package/dist/providers/docs/lib/requests.js +48 -0
- package/dist/providers/docs/lib/schemas.js +168 -0
- package/dist/providers/docs/openapi.generated.js +16 -0
- package/dist/providers/docs/safety.js +54 -0
- package/dist/providers/docs/skill.generated.js +2 -6
- package/dist/providers/docs/tools.js +802 -0
- package/dist/providers/drive/api.js +177 -0
- package/dist/providers/drive/index.d.ts +1 -12
- package/dist/providers/drive/index.js +38 -1448
- package/dist/providers/drive/lib/constants.d.ts +6 -0
- package/dist/providers/drive/lib/constants.js +6 -0
- package/dist/providers/drive/lib/contracts.js +532 -0
- package/dist/providers/drive/lib/hatch.js +197 -0
- package/dist/providers/drive/openapi.generated.js +77 -0
- package/dist/providers/drive/safety.js +90 -0
- package/dist/providers/drive/skill.generated.js +2 -6
- package/dist/providers/drive/tools.js +1290 -0
- package/dist/providers/forms/api.js +71 -0
- package/dist/providers/forms/index.d.ts +1 -12
- package/dist/providers/forms/index.js +49 -1145
- package/dist/providers/forms/lib/constants.d.ts +14 -0
- package/dist/providers/forms/lib/constants.js +19 -0
- package/dist/providers/forms/lib/hatch.js +72 -0
- package/dist/providers/forms/openapi.generated.js +23 -0
- package/dist/providers/forms/safety.js +34 -0
- package/dist/providers/forms/skill.generated.js +2 -8
- package/dist/providers/forms/tools.js +1024 -0
- package/dist/providers/github/api.js +150 -0
- package/dist/providers/github/index.d.ts +4 -5
- package/dist/providers/github/index.js +30 -87
- package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
- package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
- package/dist/providers/github/lib/discovery.js +132 -0
- package/dist/providers/github/lib/operations.js +58 -0
- package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
- package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
- package/dist/providers/github/openapi.generated.js +1216 -0
- package/dist/providers/github/safety.js +216 -0
- package/dist/providers/github/skill.generated.js +2 -5
- package/dist/providers/github/tools.js +506 -0
- package/dist/providers/gmail/api.js +114 -0
- package/dist/providers/gmail/index.d.ts +1 -12
- package/dist/providers/gmail/index.js +73 -1621
- package/dist/providers/gmail/lib/constants.d.ts +13 -0
- package/dist/providers/gmail/lib/constants.js +16 -0
- package/dist/providers/gmail/lib/index.js +173 -0
- package/dist/providers/gmail/lib/schemas.js +176 -0
- package/dist/providers/gmail/lib/threading.js +120 -0
- package/dist/providers/gmail/openapi.generated.js +92 -0
- package/dist/providers/gmail/safety.js +21 -0
- package/dist/providers/gmail/skill.generated.js +2 -6
- package/dist/providers/gmail/tools.js +1435 -0
- package/dist/providers/overflow/api.js +1008 -0
- package/dist/providers/overflow/index.d.ts +1 -17
- package/dist/providers/overflow/index.js +60 -1488
- package/dist/providers/overflow/skill.generated.js +2 -5
- package/dist/providers/overflow/tools.js +873 -0
- package/dist/providers/planning-center/api.js +467 -0
- package/dist/providers/planning-center/index.d.ts +4 -35
- package/dist/providers/planning-center/index.js +69 -2445
- package/dist/providers/planning-center/lib/constants.d.ts +58 -0
- package/dist/providers/planning-center/lib/constants.js +83 -0
- package/dist/providers/planning-center/lib/discovery.js +40 -0
- package/dist/providers/planning-center/lib/guide.js +39 -0
- package/dist/providers/planning-center/lib/json-api.js +83 -0
- package/dist/providers/planning-center/lib/verdicts.js +1758 -0
- package/dist/providers/planning-center/openapi.generated.js +1764 -0
- package/dist/providers/planning-center/safety.js +188 -0
- package/dist/providers/planning-center/skill.generated.js +2 -27
- package/dist/providers/planning-center/tools.js +1010 -0
- package/dist/providers/sheets/api.js +133 -0
- package/dist/providers/sheets/index.d.ts +4 -16
- package/dist/providers/sheets/index.js +61 -1172
- package/dist/providers/sheets/lib/constants.d.ts +14 -0
- package/dist/providers/sheets/lib/constants.js +14 -0
- package/dist/providers/sheets/lib/hatch.js +163 -0
- package/dist/providers/sheets/lib/requests.js +105 -0
- package/dist/providers/sheets/lib/schemas.js +138 -0
- package/dist/providers/sheets/openapi.generated.js +30 -0
- package/dist/providers/sheets/safety.js +27 -0
- package/dist/providers/sheets/skill.generated.js +2 -7
- package/dist/providers/sheets/tools.js +734 -0
- package/dist/providers/slides/api.js +147 -0
- package/dist/providers/slides/index.d.ts +2 -10
- package/dist/providers/slides/index.js +48 -2555
- package/dist/providers/slides/lib/constants.d.ts +11 -0
- package/dist/providers/slides/lib/constants.js +11 -0
- package/dist/providers/slides/lib/requests.js +60 -0
- package/dist/providers/slides/lib/schemas.js +565 -0
- package/dist/providers/slides/openapi.generated.js +18 -0
- package/dist/providers/slides/skill.generated.js +2 -6
- package/dist/providers/slides/tools.js +1968 -0
- package/dist/providers/stripe/api.js +401 -0
- package/dist/providers/stripe/index.d.ts +5 -27
- package/dist/providers/stripe/index.js +74 -210
- package/dist/providers/stripe/lib/config.d.ts +4 -0
- package/dist/providers/stripe/lib/config.js +2 -0
- package/dist/providers/stripe/openapi.generated.js +4 -3
- package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
- package/dist/providers/stripe/skill.generated.js +2 -11
- package/dist/providers/stripe/tools.js +77 -0
- package/dist/providers/tithely/api.js +531 -0
- package/dist/providers/tithely/index.d.ts +17 -0
- package/dist/providers/tithely/index.js +86 -965
- package/dist/providers/tithely/skill.generated.js +2 -5
- package/dist/providers/tithely/tools.js +426 -0
- package/dist/providers/vercel/api.js +551 -0
- package/dist/providers/vercel/index.d.ts +9 -25
- package/dist/providers/vercel/index.js +66 -260
- package/dist/providers/vercel/lib/config.d.ts +2 -0
- package/dist/providers/vercel/lib/config.js +2 -0
- package/dist/providers/vercel/lib/index.js +117 -0
- package/dist/providers/vercel/lib/logs.js +100 -0
- package/dist/providers/vercel/lib/pin.js +270 -0
- package/dist/providers/vercel/openapi.generated.js +10 -5
- package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
- package/dist/providers/vercel/skill.generated.js +2 -7
- package/dist/providers/vercel/tools.js +642 -0
- package/dist/redaction-identity.js +47 -0
- package/dist/redaction-marker.js +125 -0
- package/dist/registry.d.ts +21 -15
- package/dist/registry.js +409 -376
- package/dist/routes/access-tokens.js +1 -1
- package/dist/routes/actor-labels.js +1 -1
- package/dist/routes/connect.js +1 -1
- package/dist/routes/dispatch.js +103 -0
- package/dist/routes/mcp.js +170 -79
- package/dist/routes/oauth.js +3 -1
- package/dist/routes/operator.js +2 -2
- package/dist/routes/shared.d.ts +5 -4
- package/dist/routes/shared.js +244 -177
- package/dist/routes/skills.js +10 -8
- package/dist/routes/ui-config.js +27 -3
- package/dist/routes/ui-data.js +21 -20
- package/dist/routes/ui.js +1 -1
- package/dist/runtime/call-admission.js +0 -26
- package/dist/runtime/call-entry.js +30 -0
- package/dist/runtime/call.js +556 -0
- package/dist/runtime/connector-scope.js +7 -0
- package/dist/runtime/credential-probe.js +34 -0
- package/dist/runtime/executor.js +40 -0
- package/dist/runtime/native-storage.js +63 -0
- package/dist/runtime/registry.js +27 -0
- package/dist/runtime/request-scope.js +72 -0
- package/dist/runtime/run.js +15 -7
- package/dist/runtime/shared-read.js +34 -5
- package/dist/runtime/storage.js +34 -21
- package/dist/sent-secrets.d.ts +194 -37
- package/dist/sent-secrets.js +1743 -340
- package/dist/server.js +5 -56
- package/dist/skills.js +322 -222
- package/dist/sqlite.js +15 -14
- package/dist/storage/d1-copy.js +255 -0
- package/dist/storage/d1-driver.js +15 -0
- package/dist/storage/keys.js +28 -0
- package/dist/storage/sql-driver.js +88 -0
- package/dist/storage/sql-native.js +544 -0
- package/dist/storage/sql-schema.d.ts +6 -0
- package/dist/storage/sql-schema.js +15 -0
- package/dist/storage/sql.d.ts +14 -20
- package/dist/storage/sql.js +29 -535
- package/dist/timeout.js +0 -26
- package/dist/tool-safety.js +20 -10
- package/dist/types.d.ts +7 -109
- package/dist/upward.js +3 -0
- package/dist/usage-guide.js +3 -1
- package/dist/validate.d.ts +4 -2
- package/dist/validate.js +86 -9
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker.js +312 -292
- package/dist/workspace-subject.js +5 -1
- package/dist/write-outcome.js +454 -34
- package/documentation/README.md +27 -7
- package/documentation/architecture.md +2547 -226
- package/documentation/auth.md +821 -98
- package/documentation/code-mode.md +49 -16
- package/documentation/deploying.md +164 -20
- package/documentation/hosted-mcp-migration.md +460 -0
- package/documentation/integrating.md +129 -144
- package/documentation/meta-tools.md +409 -32
- package/documentation/operating.md +27 -3
- package/documentation/operator-tests.md +3 -0
- package/documentation/operator-ui.md +68 -45
- package/documentation/provider-auth-migration.md +16 -63
- package/documentation/provider-migration-0.29.md +10 -5
- package/documentation/provider-migration-0.35.md +975 -0
- package/documentation/providers.md +965 -0
- package/examples/worker/AGENTS.md +23 -9
- package/examples/worker/README.md +254 -135
- package/examples/worker/alchemy.run.ts +116 -0
- package/examples/worker/gitignore +10 -0
- package/examples/worker/src/connecta.config.ts +23 -21
- package/examples/worker/wrangler.jsonc +14 -5
- package/guides/connecting-agents.md +157 -0
- package/guides/how-it-works.md +156 -0
- package/guides/safety-and-trust.md +153 -0
- package/package.json +27 -46
- package/templates/node/.env.example +3 -0
- package/templates/node/README.md +22 -2
- package/templates/node/docker-compose.yml +1 -0
- package/templates/node/package.json +3 -2
- package/templates/node/src/connecta.config.ts +8 -0
- package/dist/catalog-drift.d.ts +0 -138
- package/dist/catalog-drift.js +0 -578
- package/dist/providers/_shared/request-token.js +0 -83
- package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
- package/dist/providers/_shared/rest/tools.d.ts +0 -141
- package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
- package/dist/providers/basecamp/index.d.ts +0 -45
- package/dist/providers/basecamp/index.js +0 -997
- package/dist/providers/basecamp/skill.generated.js +0 -9
- package/dist/providers/cloudflare/rest.d.ts +0 -37
- package/dist/providers/cloudflare/rest.js +0 -1097
- package/dist/providers/github/hosted.js +0 -218
- package/dist/providers/github/rest.js +0 -321
- package/dist/providers/infisical/index.d.ts +0 -7
- package/dist/providers/infisical/index.js +0 -713
- package/dist/providers/infisical/skill.generated.js +0 -8
- package/dist/providers/intercom/index.d.ts +0 -24
- package/dist/providers/intercom/index.js +0 -121
- package/dist/providers/intercom/skill.generated.js +0 -8
- package/dist/providers/linear/index.d.ts +0 -55
- package/dist/providers/linear/index.js +0 -537
- package/dist/providers/linear/skill.generated.js +0 -8
- package/dist/providers/mixpanel/index.d.ts +0 -59
- package/dist/providers/mixpanel/index.js +0 -472
- package/dist/providers/mixpanel/operations.js +0 -20
- package/dist/providers/mixpanel/rest.js +0 -603
- package/dist/providers/mixpanel/skill.generated.js +0 -10
- package/dist/providers/mixpanel/value-safety.js +0 -16
- package/dist/providers/notion/index.d.ts +0 -67
- package/dist/providers/notion/index.js +0 -368
- package/dist/providers/notion/openapi.generated.js +0 -75
- package/dist/providers/notion/rest.d.ts +0 -24
- package/dist/providers/notion/rest.js +0 -1226
- package/dist/providers/notion/skill.generated.js +0 -11
- package/dist/providers/notion/value-safety.js +0 -56
- package/dist/providers/revenuecat/index.d.ts +0 -51
- package/dist/providers/revenuecat/index.js +0 -697
- package/dist/providers/revenuecat/skill.generated.js +0 -11
- package/dist/providers/stripe/rest.d.ts +0 -14
- package/dist/providers/stripe/rest.js +0 -402
- package/dist/providers/vercel/rest.d.ts +0 -20
- package/dist/providers/vercel/rest.js +0 -1020
- package/dist/providers/wispr-flow/index.d.ts +0 -14
- package/dist/providers/wispr-flow/index.js +0 -117
- package/dist/providers/wispr-flow/skill.generated.js +0 -8
- /package/dist/providers/github/{key.js → lib/key.js} +0 -0
|
@@ -1,537 +0,0 @@
|
|
|
1
|
-
import { skill } from "./skill.generated.js";
|
|
2
|
-
import { remoteMcp, withCredentialDefaults } from "../../connectors/remote-mcp.js";
|
|
3
|
-
import { keys, optionsOf } from "../../config-schema.js";
|
|
4
|
-
import { REMOTE_MCP_AUTH } from "../../connectors/option-shapes.js";
|
|
5
|
-
import { reviewedCatalog } from "../../catalog-drift.js";
|
|
6
|
-
import { defineProvider, PROVIDER_COMMON } from "../../provider.js";
|
|
7
|
-
/**
|
|
8
|
-
* Linear publishes two hosted endpoints. `read-only` is not a client-side
|
|
9
|
-
* filter: it advertises the `read` scope alone, so the token minted for it
|
|
10
|
-
* cannot reach Linear's write APIs at all. The deprecated `/sse` transport is
|
|
11
|
-
* deliberately absent — it now answers 404.
|
|
12
|
-
*/
|
|
13
|
-
export const LINEAR_MCP_ENDPOINTS = {
|
|
14
|
-
"read-write": "https://mcp.linear.app/mcp",
|
|
15
|
-
"read-only": "https://mcp.linear.app/mcp/readonly",
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Every `save_*` is destructive because Linear's `save_*` tools are upserts:
|
|
19
|
-
* omitting a record id creates, supplying one overwrites in place, and the
|
|
20
|
-
* schema cannot tell them apart.
|
|
21
|
-
*/
|
|
22
|
-
const UPSERT = "An upsert: supplying a record id overwrites that record in place, and the schema cannot tell a create from an update.";
|
|
23
|
-
/**
|
|
24
|
-
* The release-reviewed classification (P5), used both to classify a live tool
|
|
25
|
-
* and as the record the drift check compares against, so the annotation a
|
|
26
|
-
* caller gets and the verdict a check reads can never disagree. It is a
|
|
27
|
-
* superset: Linear's hosted `tools/list` varies by plan and enabled features,
|
|
28
|
-
* so a name this workspace never returns costs nothing, while an unlisted new
|
|
29
|
-
* one without an explicit read annotation fails closed. The genuine creates —
|
|
30
|
-
* the `create_*_label` and attachment tools — are plain writes rather than
|
|
31
|
-
* destructive.
|
|
32
|
-
*/
|
|
33
|
-
const LINEAR_CLASSIFICATION = {
|
|
34
|
-
tools: {
|
|
35
|
-
// Issues
|
|
36
|
-
list_issues: {
|
|
37
|
-
schemaDigest: "sha256:294b644db541de9f1f4cec011164fe7cec29153aa12d5d94d0748fe35fe973d4",
|
|
38
|
-
"verdict": "read",
|
|
39
|
-
"reason": "Reads existing Linear list issues data without changing workspace state.",
|
|
40
|
-
},
|
|
41
|
-
get_issue: {
|
|
42
|
-
schemaDigest: "sha256:33b204248ae63119751ed4cbade909b05cfbd9aa241cd39e4cec5690d062688e",
|
|
43
|
-
"verdict": "read",
|
|
44
|
-
"reason": "Reads existing Linear get issue data without changing workspace state.",
|
|
45
|
-
},
|
|
46
|
-
list_issue_statuses: {
|
|
47
|
-
schemaDigest: "sha256:8a740e800811796eab16dee1c22db5d8e3c971bebf3ccec7d7d2ee36157f4316",
|
|
48
|
-
"verdict": "read",
|
|
49
|
-
"reason": "Reads existing Linear list issue statuses data without changing workspace state.",
|
|
50
|
-
},
|
|
51
|
-
get_issue_status: {
|
|
52
|
-
schemaDigest: "sha256:ea4e287dc5fc9b930b790430ca02f221a75444d789a252d87aff838767ce4f05",
|
|
53
|
-
"verdict": "read",
|
|
54
|
-
"reason": "Reads existing Linear get issue status data without changing workspace state.",
|
|
55
|
-
},
|
|
56
|
-
list_issue_labels: {
|
|
57
|
-
schemaDigest: "sha256:5eb361d26464fcaef257499c150bf9cb9349308d03ef31c119e826752cbc998e",
|
|
58
|
-
"verdict": "read",
|
|
59
|
-
"reason": "Reads existing Linear list issue labels data without changing workspace state.",
|
|
60
|
-
},
|
|
61
|
-
save_issue: {
|
|
62
|
-
schemaDigest: "sha256:23a22fd38cd3234f3a112c460daf04779034e54e45ed00ca27232574f3d60547",
|
|
63
|
-
verdict: "destructive",
|
|
64
|
-
reason: UPSERT,
|
|
65
|
-
},
|
|
66
|
-
save_issue_label: {
|
|
67
|
-
schemaDigest: "sha256:a39c5e1194b33f1a07139c6c2219a991a818f7027b26aef059959bc67248d528",
|
|
68
|
-
verdict: "destructive",
|
|
69
|
-
reason: UPSERT,
|
|
70
|
-
},
|
|
71
|
-
retire_issue_label: {
|
|
72
|
-
schemaDigest: "sha256:d9f254b2c134123d14a9b91ed0df063d45aa99d85f2ccdaf90ac57aa3c50a3de",
|
|
73
|
-
verdict: "destructive",
|
|
74
|
-
reason: "Retires an existing issue label or group, including child labels, so it cannot be applied to new records.",
|
|
75
|
-
},
|
|
76
|
-
restore_issue_label: {
|
|
77
|
-
schemaDigest: "sha256:d9f254b2c134123d14a9b91ed0df063d45aa99d85f2ccdaf90ac57aa3c50a3de",
|
|
78
|
-
verdict: "destructive",
|
|
79
|
-
reason: "Restores an existing issue label or group and every child label, including children retired separately.",
|
|
80
|
-
},
|
|
81
|
-
create_issue_label: {
|
|
82
|
-
schemaDigest: "sha256:92a9bbefc33410795f6c23ae609b1cb61d6168b36b5b60f4563090e468c7f53c",
|
|
83
|
-
"verdict": "write",
|
|
84
|
-
"reason": "Creates Linear state through create_issue_label; the reviewed operation only appends.",
|
|
85
|
-
},
|
|
86
|
-
// Projects
|
|
87
|
-
list_projects: {
|
|
88
|
-
schemaDigest: "sha256:3cadc9d39d1372e89bf671ae44b88aee4d7bc0d23af24979e2401facedd0253f",
|
|
89
|
-
"verdict": "read",
|
|
90
|
-
"reason": "Reads existing Linear list projects data without changing workspace state.",
|
|
91
|
-
},
|
|
92
|
-
get_project: {
|
|
93
|
-
schemaDigest: "sha256:e752476aabfdf9d25b03a57f682f6fcb187b10d823a3c6371abe49f7dda8a6e0",
|
|
94
|
-
"verdict": "read",
|
|
95
|
-
"reason": "Reads existing Linear get project data without changing workspace state.",
|
|
96
|
-
},
|
|
97
|
-
list_project_labels: {
|
|
98
|
-
schemaDigest: "sha256:5eb361d26464fcaef257499c150bf9cb9349308d03ef31c119e826752cbc998e",
|
|
99
|
-
"verdict": "read",
|
|
100
|
-
"reason": "Reads existing Linear list project labels data without changing workspace state.",
|
|
101
|
-
},
|
|
102
|
-
save_project: {
|
|
103
|
-
schemaDigest: "sha256:2531c09aba662f0793dad42fa43d32708fe68047479cf2c00b32f368e1014413",
|
|
104
|
-
verdict: "destructive",
|
|
105
|
-
reason: UPSERT,
|
|
106
|
-
},
|
|
107
|
-
save_project_label: {
|
|
108
|
-
schemaDigest: "sha256:703b141f537e40c693fd6cf5e6fc8ba97359830f943e022f4b32414562e72719",
|
|
109
|
-
verdict: "destructive",
|
|
110
|
-
reason: UPSERT,
|
|
111
|
-
},
|
|
112
|
-
retire_project_label: {
|
|
113
|
-
schemaDigest: "sha256:d9f254b2c134123d14a9b91ed0df063d45aa99d85f2ccdaf90ac57aa3c50a3de",
|
|
114
|
-
verdict: "destructive",
|
|
115
|
-
reason: "Retires an existing project label or group, including child labels, so it cannot be applied to new records.",
|
|
116
|
-
},
|
|
117
|
-
restore_project_label: {
|
|
118
|
-
schemaDigest: "sha256:d9f254b2c134123d14a9b91ed0df063d45aa99d85f2ccdaf90ac57aa3c50a3de",
|
|
119
|
-
verdict: "destructive",
|
|
120
|
-
reason: "Restores an existing project label or group and every child label, including children retired separately.",
|
|
121
|
-
},
|
|
122
|
-
// Milestones
|
|
123
|
-
list_milestones: {
|
|
124
|
-
schemaDigest: "sha256:97e2d99f903538f1a99d7aef71bb8215dc99279e4395310c14a1c5c67852444a",
|
|
125
|
-
"verdict": "read",
|
|
126
|
-
"reason": "Reads existing Linear list milestones data without changing workspace state.",
|
|
127
|
-
},
|
|
128
|
-
get_milestone: {
|
|
129
|
-
schemaDigest: "sha256:5631cd5fdcd020ad3b57ee65dc92ec32a8be0df06136a7bcb1a83e5fb333df71",
|
|
130
|
-
"verdict": "read",
|
|
131
|
-
"reason": "Reads existing Linear get milestone data without changing workspace state.",
|
|
132
|
-
},
|
|
133
|
-
save_milestone: {
|
|
134
|
-
schemaDigest: "sha256:d55f3018b2e8693c950e71751a6769f056f85cc51f351c1df26674f45eda4974",
|
|
135
|
-
verdict: "destructive",
|
|
136
|
-
reason: UPSERT,
|
|
137
|
-
},
|
|
138
|
-
// Initiatives
|
|
139
|
-
list_initiatives: {
|
|
140
|
-
schemaDigest: "sha256:7d4bf3b546207ae0e41e215dc1f115ae05c61125b3299335a290e42498a63704",
|
|
141
|
-
"verdict": "read",
|
|
142
|
-
"reason": "Reads existing Linear list initiatives data without changing workspace state.",
|
|
143
|
-
},
|
|
144
|
-
get_initiative: {
|
|
145
|
-
schemaDigest: "sha256:dda5376b85019b51df65b94ed0baed0bf2715d59567ff6169bbcf67c6794ba81",
|
|
146
|
-
"verdict": "read",
|
|
147
|
-
"reason": "Reads existing Linear get initiative data without changing workspace state.",
|
|
148
|
-
},
|
|
149
|
-
list_initiative_labels: {
|
|
150
|
-
schemaDigest: "sha256:8c844c2f031db6e3c2665dac47e3ea8b006330b4bcc6df4b6479055e57ee057d",
|
|
151
|
-
"verdict": "read",
|
|
152
|
-
"reason": "Reads existing Linear list initiative labels data without changing workspace state.",
|
|
153
|
-
},
|
|
154
|
-
save_initiative: {
|
|
155
|
-
schemaDigest: "sha256:65a4b02ead7630b12db3d9811192fb2595b8a34c79e1146a19318d640bf8b104",
|
|
156
|
-
verdict: "destructive",
|
|
157
|
-
reason: UPSERT,
|
|
158
|
-
},
|
|
159
|
-
save_initiative_label: {
|
|
160
|
-
schemaDigest: "sha256:23a42a87a9420428381a719b5a64d4514c5edd97bddb885517ade6306d36bbe0",
|
|
161
|
-
verdict: "destructive",
|
|
162
|
-
reason: UPSERT,
|
|
163
|
-
},
|
|
164
|
-
retire_initiative_label: {
|
|
165
|
-
schemaDigest: "sha256:d9f254b2c134123d14a9b91ed0df063d45aa99d85f2ccdaf90ac57aa3c50a3de",
|
|
166
|
-
verdict: "destructive",
|
|
167
|
-
reason: "Retires an existing initiative label or group, including child labels, so it cannot be applied to new records.",
|
|
168
|
-
},
|
|
169
|
-
restore_initiative_label: {
|
|
170
|
-
schemaDigest: "sha256:d9f254b2c134123d14a9b91ed0df063d45aa99d85f2ccdaf90ac57aa3c50a3de",
|
|
171
|
-
verdict: "destructive",
|
|
172
|
-
reason: "Restores an existing initiative label or group and every child label, including children retired separately.",
|
|
173
|
-
},
|
|
174
|
-
create_initiative_label: {
|
|
175
|
-
schemaDigest: "sha256:442e098c4e81e46071f13f9359dd296acd1cb03eee0c71d68fc7a329cc503277",
|
|
176
|
-
"verdict": "write",
|
|
177
|
-
"reason": "Creates Linear state through create_initiative_label; the reviewed operation only appends.",
|
|
178
|
-
},
|
|
179
|
-
// Saved views
|
|
180
|
-
list_custom_views: {
|
|
181
|
-
schemaDigest: "sha256:ec3cbc000f325d82c0b4949acf6995cf4c11d4b4084c84037ee5aa5801eea92d",
|
|
182
|
-
verdict: "read",
|
|
183
|
-
reason: "Lists accessible saved view metadata without changing views or their matching records.",
|
|
184
|
-
},
|
|
185
|
-
// Cycles
|
|
186
|
-
list_cycles: {
|
|
187
|
-
schemaDigest: "sha256:39d0ade50e1bbe3e68f366b12b9ce001d4ab39dda416e061cc670c402963237f",
|
|
188
|
-
"verdict": "read",
|
|
189
|
-
"reason": "Reads existing Linear list cycles data without changing workspace state.",
|
|
190
|
-
},
|
|
191
|
-
// Comments
|
|
192
|
-
list_comments: {
|
|
193
|
-
schemaDigest: "sha256:cd004335be5c0e9dfcd7997be16527cbaaf1eafddfa1ff0c367d904fb4c7372b",
|
|
194
|
-
"verdict": "read",
|
|
195
|
-
"reason": "Reads existing Linear list comments data without changing workspace state.",
|
|
196
|
-
},
|
|
197
|
-
save_comment: {
|
|
198
|
-
schemaDigest: "sha256:795f5d486218ccfe5d2d3480d8624feecb0af92cbff80804c3030a994aa343aa",
|
|
199
|
-
verdict: "destructive",
|
|
200
|
-
reason: UPSERT,
|
|
201
|
-
},
|
|
202
|
-
delete_comment: {
|
|
203
|
-
schemaDigest: "sha256:2c78afdc6b2a0e16421b88ad51e84fcc86f64ae7b551eae01a2f3c8437ebbb2b",
|
|
204
|
-
"verdict": "destructive",
|
|
205
|
-
"reason": "Changes or removes existing Linear state through delete_comment.",
|
|
206
|
-
},
|
|
207
|
-
// Documents
|
|
208
|
-
list_documents: {
|
|
209
|
-
schemaDigest: "sha256:0c34f1ad0045ed166a200790b80cc274357f8dd916bade75267ce17ad3a0cd70",
|
|
210
|
-
"verdict": "read",
|
|
211
|
-
"reason": "Reads existing Linear list documents data without changing workspace state.",
|
|
212
|
-
},
|
|
213
|
-
get_document: {
|
|
214
|
-
schemaDigest: "sha256:3cb4635f04b8a5b10b6973a579123b0ff38b9942a4e5c019140c94c67bd23c29",
|
|
215
|
-
"verdict": "read",
|
|
216
|
-
"reason": "Reads existing Linear get document data without changing workspace state.",
|
|
217
|
-
},
|
|
218
|
-
save_document: {
|
|
219
|
-
schemaDigest: "sha256:a1022c0e1a427aca42a5032acc1fe798eb41a6b503a9b8f2b0b1842bcc42b77a",
|
|
220
|
-
verdict: "destructive",
|
|
221
|
-
reason: UPSERT,
|
|
222
|
-
},
|
|
223
|
-
// Inbox
|
|
224
|
-
get_notifications: {
|
|
225
|
-
schemaDigest: "sha256:eae99e7b6395842bd0aa3008dc4b8b75c12be444bca1111f68352127db852750",
|
|
226
|
-
verdict: "read",
|
|
227
|
-
reason: "Lists the authenticated user's inbox notifications without marking or snoozing them.",
|
|
228
|
-
},
|
|
229
|
-
mark_notification: {
|
|
230
|
-
schemaDigest: "sha256:96190ee9b29c980c1df2bf741ec1eebc49eed9a87f6db74d89bfa87b800b7fac",
|
|
231
|
-
verdict: "write",
|
|
232
|
-
reason: "Changes read/unread or snooze state in the authenticated user's inbox; the reviewed operation removes no workspace record.",
|
|
233
|
-
},
|
|
234
|
-
// Teams and users
|
|
235
|
-
list_teams: {
|
|
236
|
-
schemaDigest: "sha256:35496fcc47293f7976a418f5babd99f063465c9b614606b1feb0ab13879a4048",
|
|
237
|
-
"verdict": "read",
|
|
238
|
-
"reason": "Reads existing Linear list teams data without changing workspace state.",
|
|
239
|
-
},
|
|
240
|
-
get_team: {
|
|
241
|
-
schemaDigest: "sha256:4e62e3954a183e2256921cd40450335d3fcd6b4ba52354854a4257efabebf256",
|
|
242
|
-
"verdict": "read",
|
|
243
|
-
"reason": "Reads existing Linear get team data without changing workspace state.",
|
|
244
|
-
},
|
|
245
|
-
list_users: {
|
|
246
|
-
schemaDigest: "sha256:2ce638c3be81ff50ac7a4f2c929cce39a62a011aad006ba9a26569a45ad095e5",
|
|
247
|
-
"verdict": "read",
|
|
248
|
-
"reason": "Reads existing Linear list users data without changing workspace state.",
|
|
249
|
-
},
|
|
250
|
-
get_user: {
|
|
251
|
-
schemaDigest: "sha256:5046c1d7d44be9142585a2fbd71785fb6f5832b99d723763251913e1a4ccc6f9",
|
|
252
|
-
"verdict": "read",
|
|
253
|
-
"reason": "Reads existing Linear get user data without changing workspace state.",
|
|
254
|
-
},
|
|
255
|
-
get_workspace: {
|
|
256
|
-
schemaDigest: "sha256:caa1215d2278f303733e5fcb008a09853e2bc0e4d5545416a1f40eb4e3ba29fe",
|
|
257
|
-
"verdict": "read",
|
|
258
|
-
"reason": "Reads existing Linear get workspace data without changing workspace state.",
|
|
259
|
-
},
|
|
260
|
-
get_triage_responsibility: {
|
|
261
|
-
schemaDigest: "sha256:8ee4f3c9799a763001089d1a56691020fac5bf9866b80bdbc21495702051737b",
|
|
262
|
-
verdict: "read",
|
|
263
|
-
reason: "Reads a team's current triage responsibility and upcoming rotation shifts without changing assignments.",
|
|
264
|
-
},
|
|
265
|
-
// Templates
|
|
266
|
-
list_templates: {
|
|
267
|
-
schemaDigest: "sha256:387aea405fd7d1ebd9b44228865f55dcc03cdbf1ff82dfe6a6766994177b3531",
|
|
268
|
-
"verdict": "read",
|
|
269
|
-
"reason": "Reads existing Linear list templates data without changing workspace state.",
|
|
270
|
-
},
|
|
271
|
-
get_template: {
|
|
272
|
-
schemaDigest: "sha256:b5feb94b620c9466a87c0feb232e19223e73abb1965579208c1aa47e6ef2b082",
|
|
273
|
-
"verdict": "read",
|
|
274
|
-
"reason": "Reads existing Linear get template data without changing workspace state.",
|
|
275
|
-
},
|
|
276
|
-
// Status updates
|
|
277
|
-
get_status_updates: {
|
|
278
|
-
schemaDigest: "sha256:af40904370cffcca265f1a05bff133d561c7009f6960a84096025cf8163663f3",
|
|
279
|
-
"verdict": "read",
|
|
280
|
-
"reason": "Reads existing Linear get status updates data without changing workspace state.",
|
|
281
|
-
},
|
|
282
|
-
save_status_update: {
|
|
283
|
-
schemaDigest: "sha256:5078fdc9f3ea4ee104d05def28e45949083d4f2ff6f2435bd6b856abccbece75",
|
|
284
|
-
verdict: "destructive",
|
|
285
|
-
reason: UPSERT,
|
|
286
|
-
},
|
|
287
|
-
delete_status_update: {
|
|
288
|
-
schemaDigest: "sha256:5e4e4cdac2d818bdc2a572947a11a28b251797e59affea97aa3b853f5439bf7f",
|
|
289
|
-
"verdict": "destructive",
|
|
290
|
-
"reason": "Changes or removes existing Linear state through delete_status_update.",
|
|
291
|
-
},
|
|
292
|
-
// Releases
|
|
293
|
-
list_release_pipelines: {
|
|
294
|
-
schemaDigest: "sha256:7a20220ffbd895f834a0bd85ab6a444fbe7d71ee5b1d5dcbf8c109c7451984e0",
|
|
295
|
-
"verdict": "read",
|
|
296
|
-
"reason": "Reads existing Linear list release pipelines data without changing workspace state.",
|
|
297
|
-
},
|
|
298
|
-
list_releases: {
|
|
299
|
-
schemaDigest: "sha256:c9c6fa51eb980c3304a37f64e2a73f6e2e03e252330fcdb4ab9fc2e995c949cc",
|
|
300
|
-
"verdict": "read",
|
|
301
|
-
"reason": "Reads existing Linear list releases data without changing workspace state.",
|
|
302
|
-
},
|
|
303
|
-
get_release: {
|
|
304
|
-
schemaDigest: "sha256:6adeb4b4a0cb4888cfb45bf0a0d047f6de516dc05b7067912f5ba77025155fdb",
|
|
305
|
-
"verdict": "read",
|
|
306
|
-
"reason": "Reads existing Linear get release data without changing workspace state.",
|
|
307
|
-
},
|
|
308
|
-
list_release_notes: {
|
|
309
|
-
schemaDigest: "sha256:b0f1da15034143f29d44d949ea08bdfec2509ef196175a7a8ee5db11b655b06a",
|
|
310
|
-
"verdict": "read",
|
|
311
|
-
"reason": "Reads existing Linear list release notes data without changing workspace state.",
|
|
312
|
-
},
|
|
313
|
-
get_release_note: {
|
|
314
|
-
schemaDigest: "sha256:d28c0187ad65bca21b32451f8ab1d4a1c1a26efb485b9d4395e9b3d41555f532",
|
|
315
|
-
"verdict": "read",
|
|
316
|
-
"reason": "Reads existing Linear get release note data without changing workspace state.",
|
|
317
|
-
},
|
|
318
|
-
save_release: {
|
|
319
|
-
schemaDigest: "sha256:97db7fa9246750a0533d07ed73d633fadc3fe2f27f2bf95deb6ea86bbcb2bc4b",
|
|
320
|
-
verdict: "destructive",
|
|
321
|
-
reason: UPSERT,
|
|
322
|
-
},
|
|
323
|
-
save_release_note: {
|
|
324
|
-
schemaDigest: "sha256:933c46faa3bb1edb4e9cc89299ab7dbcdaafab4bee6615aa43d538703fe4dab7",
|
|
325
|
-
verdict: "destructive",
|
|
326
|
-
reason: UPSERT,
|
|
327
|
-
},
|
|
328
|
-
// Code review
|
|
329
|
-
list_diffs: {
|
|
330
|
-
schemaDigest: "sha256:1eccf293d83cd2d962e6f840cd42dac43eaee1a15cbf7ea6b78bd6b55fe94313",
|
|
331
|
-
"verdict": "read",
|
|
332
|
-
"reason": "Reads existing Linear list diffs data without changing workspace state.",
|
|
333
|
-
},
|
|
334
|
-
get_diff: {
|
|
335
|
-
schemaDigest: "sha256:692aaf3e4a1adb0b82e38bf01574b6615747f48619e295f0377255cf2fd3dbaa",
|
|
336
|
-
"verdict": "read",
|
|
337
|
-
"reason": "Reads existing Linear get diff data without changing workspace state.",
|
|
338
|
-
},
|
|
339
|
-
get_diff_threads: {
|
|
340
|
-
schemaDigest: "sha256:98b66ecda18665bf883e70169c472802105fc113c0f39d3e25da76824b3e3457",
|
|
341
|
-
"verdict": "read",
|
|
342
|
-
"reason": "Reads existing Linear get diff threads data without changing workspace state.",
|
|
343
|
-
},
|
|
344
|
-
save_diff_comment: {
|
|
345
|
-
schemaDigest: "sha256:29a06cce756a5f3a6987693129a260659cad50083f7400723fb0b8bc9dd2b8bb",
|
|
346
|
-
verdict: "destructive",
|
|
347
|
-
reason: UPSERT,
|
|
348
|
-
},
|
|
349
|
-
resolve_diff_thread: {
|
|
350
|
-
schemaDigest: "sha256:e493a5e74c1fd7e7bf104dbed8032c721c15209991aa12686c7f46b82a49ab2e",
|
|
351
|
-
"verdict": "destructive",
|
|
352
|
-
"reason": "Changes or removes existing Linear state through resolve_diff_thread.",
|
|
353
|
-
},
|
|
354
|
-
delete_diff_comment: {
|
|
355
|
-
schemaDigest: "sha256:88db600198790b6c99b6e9397d26649f49d48b0deaa758dc64e6f8b516d817c7",
|
|
356
|
-
"verdict": "destructive",
|
|
357
|
-
"reason": "Changes or removes existing Linear state through delete_diff_comment.",
|
|
358
|
-
},
|
|
359
|
-
submit_diff_review: {
|
|
360
|
-
schemaDigest: "sha256:97aa13f00d23db8d16191104dae0ddd2a3dd1c047415bf770474be0180320acf",
|
|
361
|
-
"verdict": "destructive",
|
|
362
|
-
"reason": "Changes or removes existing Linear state through submit_diff_review.",
|
|
363
|
-
},
|
|
364
|
-
update_diff: {
|
|
365
|
-
schemaDigest: "sha256:8e5b77961d3d344b99a68cb82901d3764f6fb4c700f42c3c2fc59ea12a490f27",
|
|
366
|
-
verdict: "destructive",
|
|
367
|
-
reason: "Changes an existing diff's metadata, review requests, issue links or status; combined updates can partially succeed.",
|
|
368
|
-
},
|
|
369
|
-
merge_diff: {
|
|
370
|
-
schemaDigest: "sha256:e809bf0416c3cfb99794448eb66f69f83bbd7a451604faec7f622f47025f17fc",
|
|
371
|
-
"verdict": "destructive",
|
|
372
|
-
"reason": "Changes or removes existing Linear state through merge_diff.",
|
|
373
|
-
},
|
|
374
|
-
// Attachments
|
|
375
|
-
get_attachment: {
|
|
376
|
-
schemaDigest: "sha256:158ac0e0add99d9a9109a4f3549266be8f2d1eb5fa0832c861a4c56c20708a3b",
|
|
377
|
-
"verdict": "read",
|
|
378
|
-
"reason": "Reads existing Linear get attachment data without changing workspace state.",
|
|
379
|
-
},
|
|
380
|
-
prepare_attachment_upload: {
|
|
381
|
-
schemaDigest: "sha256:641559612992b1f6c1cd69fec3c66b898c12d2a21bc58973589be81fc2612c9c",
|
|
382
|
-
verdict: "write",
|
|
383
|
-
reason: "Mints an upload URL: a side effect, but it changes no existing record.",
|
|
384
|
-
},
|
|
385
|
-
create_attachment_from_upload: {
|
|
386
|
-
schemaDigest: "sha256:10818ba9327b9b70816512fd557ed3b4b85776f47cf8ca498f0d3ba17953dc2a",
|
|
387
|
-
"verdict": "write",
|
|
388
|
-
"reason": "Creates Linear state through create_attachment_from_upload; the reviewed operation only appends.",
|
|
389
|
-
},
|
|
390
|
-
create_attachment: {
|
|
391
|
-
schemaDigest: "sha256:0a4e4d5f6b62b5fbfd52d466d8b3167005e3574f3d00cf92e2fbfbbe769d8a1e",
|
|
392
|
-
"verdict": "write",
|
|
393
|
-
"reason": "Creates Linear state through create_attachment; the reviewed operation only appends.",
|
|
394
|
-
},
|
|
395
|
-
delete_attachment: {
|
|
396
|
-
schemaDigest: "sha256:ef21d1c1a7d09827b3c44bdefe18fc2dec28af468d19d2060f97df0a0f76bd0e",
|
|
397
|
-
"verdict": "destructive",
|
|
398
|
-
"reason": "Changes or removes existing Linear state through delete_attachment.",
|
|
399
|
-
},
|
|
400
|
-
// Explicit issue access.
|
|
401
|
-
share_issue: {
|
|
402
|
-
schemaDigest: "sha256:f41410b4cf5effc62a03ad26bcf76ba792a1f7bea52a78da9183b5279b4a0433",
|
|
403
|
-
verdict: "destructive",
|
|
404
|
-
reason: "Changes who can see an existing issue.",
|
|
405
|
-
},
|
|
406
|
-
unshare_issue: {
|
|
407
|
-
schemaDigest: "sha256:f41410b4cf5effc62a03ad26bcf76ba792a1f7bea52a78da9183b5279b4a0433",
|
|
408
|
-
verdict: "destructive",
|
|
409
|
-
reason: "Changes who can see an existing issue.",
|
|
410
|
-
},
|
|
411
|
-
// Agent skills
|
|
412
|
-
list_agent_skills: {
|
|
413
|
-
schemaDigest: "sha256:38fc34a53e932314e0bf6abc6493bca1256d37a951befceb95c1fe13bfa46ebd",
|
|
414
|
-
"verdict": "read",
|
|
415
|
-
"reason": "Reads existing Linear list agent skills data without changing workspace state.",
|
|
416
|
-
},
|
|
417
|
-
get_agent_skill: {
|
|
418
|
-
schemaDigest: "sha256:deb4296f3f7612ffb1af1e6ec75976acdc04ba12aff6c129a92b5a87e7a9ee09",
|
|
419
|
-
"verdict": "read",
|
|
420
|
-
"reason": "Reads existing Linear get agent skill data without changing workspace state.",
|
|
421
|
-
},
|
|
422
|
-
// Documentation search
|
|
423
|
-
search_documentation: {
|
|
424
|
-
schemaDigest: "sha256:c2b89b06275e7b0cb63b73af749ae88b694446066058584e65c9208e33339efa",
|
|
425
|
-
"verdict": "read",
|
|
426
|
-
"reason": "Reads existing Linear search documentation data without changing workspace state.",
|
|
427
|
-
},
|
|
428
|
-
// Customer requests (plan-gated)
|
|
429
|
-
list_customers: {
|
|
430
|
-
"verdict": "read",
|
|
431
|
-
optional: true,
|
|
432
|
-
"reason": "Reads existing Linear list customers data without changing workspace state.",
|
|
433
|
-
},
|
|
434
|
-
list_customer_needs: {
|
|
435
|
-
verdict: "read",
|
|
436
|
-
optional: true,
|
|
437
|
-
reason: "Lists customer requests for an issue, project or initiative; announced in Linear's 2026-10-08 changelog and plan-gated in hosted catalogs.",
|
|
438
|
-
},
|
|
439
|
-
save_customer: { verdict: "destructive", optional: true, reason: UPSERT },
|
|
440
|
-
delete_customer: {
|
|
441
|
-
"verdict": "destructive",
|
|
442
|
-
optional: true,
|
|
443
|
-
"reason": "Changes or removes existing Linear state through delete_customer.",
|
|
444
|
-
},
|
|
445
|
-
save_customer_need: { verdict: "destructive", optional: true, reason: UPSERT },
|
|
446
|
-
delete_customer_need: {
|
|
447
|
-
"verdict": "destructive",
|
|
448
|
-
optional: true,
|
|
449
|
-
"reason": "Changes or removes existing Linear state through delete_customer_need.",
|
|
450
|
-
},
|
|
451
|
-
// Markdown helper.
|
|
452
|
-
extract_images: {
|
|
453
|
-
schemaDigest: "sha256:1d7273f64621448fd901fb4ac94ee3b29a4c4a833f0b27083775bd685f8a401c",
|
|
454
|
-
verdict: "read",
|
|
455
|
-
reason: "Reads images out of content it is handed and touches no workspace state; the hosted server ships it annotated readOnlyHint: true and idempotentHint: true.",
|
|
456
|
-
},
|
|
457
|
-
},
|
|
458
|
-
};
|
|
459
|
-
/**
|
|
460
|
-
* Connection-independent conventions. The access note and purpose lead the
|
|
461
|
-
* rendered guide; deployment instructions follow it.
|
|
462
|
-
*/
|
|
463
|
-
/** The closed options linear() accepts, checked against LinearOptions. */
|
|
464
|
-
const LINEAR_OPTIONS = optionsOf()({
|
|
465
|
-
...PROVIDER_COMMON,
|
|
466
|
-
...keys("access"),
|
|
467
|
-
auth: REMOTE_MCP_AUTH,
|
|
468
|
-
});
|
|
469
|
-
/** A maintained Linear hosted-MCP connection. */
|
|
470
|
-
export const linear = defineProvider({
|
|
471
|
-
name: "linear",
|
|
472
|
-
title: "Linear",
|
|
473
|
-
kind: "mcp",
|
|
474
|
-
readme: "Linear",
|
|
475
|
-
bundle: { "baselineGzip": 127244, "maxGzip": 187244 },
|
|
476
|
-
skill,
|
|
477
|
-
options: LINEAR_OPTIONS,
|
|
478
|
-
classify: LINEAR_CLASSIFICATION,
|
|
479
|
-
create(id, options, provider) {
|
|
480
|
-
const access = options.access;
|
|
481
|
-
if (access !== "read-write" && access !== "read-only") {
|
|
482
|
-
throw new Error(`linear("${id}") requires access "read-write" or "read-only".`);
|
|
483
|
-
}
|
|
484
|
-
// Leads the guide because discovery summarizes a connector by its first
|
|
485
|
-
// content line: whether this connection can write at all is the one thing
|
|
486
|
-
// an agent must know before it opens the guide, and `search_tools` shows
|
|
487
|
-
// the summary without the description.
|
|
488
|
-
const accessNote = access === "read-only"
|
|
489
|
-
? "Read-only connection: bound to Linear's read-only endpoint, whose token is scope-limited downstream, so every write fails at Linear regardless of arguments. Route writes to a connector configured for read-write access."
|
|
490
|
-
: "Read-write connection: treat every `save_`, `create_`, `delete_`, `retire_`, `restore_`, `mark_`, `update_`, `resolve_`, `submit_`, `share_`, `unshare_`, `prepare_`, and `merge_` operation as a write. Connecta classifies the maintained writes explicitly, and a read-only endpoint refuses them. Unknown tools without an explicit, uncontradicted read annotation fail closed.";
|
|
491
|
-
return remoteMcp(id, {
|
|
492
|
-
url: LINEAR_MCP_ENDPOINTS[access],
|
|
493
|
-
...provider.connectorOptions,
|
|
494
|
-
// The title is what browse-time discovery renders; a read-only
|
|
495
|
-
// connection says so there rather than only in a description the caller
|
|
496
|
-
// may not see.
|
|
497
|
-
title: options.title ?? (access === "read-only" ? "Linear (read-only)" : "Linear"),
|
|
498
|
-
description: access === "read-only"
|
|
499
|
-
? `Linear issue tracking and project planning (read-only) — ${options.purpose}`
|
|
500
|
-
: `Linear issue tracking and project planning — ${options.purpose}`,
|
|
501
|
-
// Linear's MCP endpoint takes an API key the same way it takes an OAuth
|
|
502
|
-
// token — `Authorization: Bearer <yourtoken>` — so only the slot copy is
|
|
503
|
-
// provider-specific and the bearer framing default stands. The
|
|
504
|
-
// bare-header convention belongs to Linear's GraphQL API, not to this
|
|
505
|
-
// endpoint.
|
|
506
|
-
auth: withCredentialDefaults(options.auth ?? { type: "oauth" }, {
|
|
507
|
-
credential: {
|
|
508
|
-
label: "Personal API key",
|
|
509
|
-
description: "A Linear personal API key. It carries the issuing user's full workspace access and is stored encrypted; the read-only endpoint still limits what it can reach.",
|
|
510
|
-
placeholder: "lin_api_…",
|
|
511
|
-
},
|
|
512
|
-
}),
|
|
513
|
-
requireHttps: true,
|
|
514
|
-
classify: provider.classify,
|
|
515
|
-
usageGuide: provider.usageGuide({
|
|
516
|
-
context: [accessNote, `Workspace purpose: ${options.purpose}`],
|
|
517
|
-
// Explicit rather than derived. The derived summary would truncate the
|
|
518
|
-
// access note mid-sentence at 120 characters, and the one thing a
|
|
519
|
-
// browsing agent must not get wrong is whether this connection can
|
|
520
|
-
// write at all ([#342](https://github.com/zackbart/connecta/issues/342)).
|
|
521
|
-
// Not `required`: Linear's own schemas describe each call correctly;
|
|
522
|
-
// the guide adds cross-tool sequence advice worth reading before a
|
|
523
|
-
// write, not before every read.
|
|
524
|
-
summary: access === "read-only"
|
|
525
|
-
? "Read-only: every write fails at Linear. Id resolution, upsert semantics, and cursor paging."
|
|
526
|
-
: "Read-write. Id resolution, `save_*` upsert semantics, plan-gated areas, and cursor paging.",
|
|
527
|
-
}),
|
|
528
|
-
});
|
|
529
|
-
},
|
|
530
|
-
});
|
|
531
|
-
/**
|
|
532
|
-
* The reviewed classification in the legacy manifest form.
|
|
533
|
-
*
|
|
534
|
-
* @deprecated Read `linear.definition.classify` instead. This alias is derived
|
|
535
|
-
* from it and retained for existing public imports.
|
|
536
|
-
*/
|
|
537
|
-
export const LINEAR_VETTED_CATALOG = reviewedCatalog(linear.definition.classify, 'defineProvider("linear")');
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// Generated by scripts/generate-providers.mjs; do not edit.
|
|
2
|
-
export const skill = {
|
|
3
|
-
"content": "- Issue arguments use `state`, not `status`. Resolve team-specific states through `list_issue_statuses` and use the value format required by the live input schema.\n- Resolve identity before acting. `list_teams`, `list_users`, `list_projects`, `list_issue_statuses`, and `list_issue_labels` return the ids that create and update arguments expect; do not guess a team, status, label, or assignee id.\n- Issues carry a human identifier like `ENG-123` — team key, dash, number — alongside a UUID. Use the identifier the request gave you and resolve it with `get_issue` or `list_issues` when a tool wants an id; never fabricate an identifier or renumber one.\n- `save_*` tools are upserts: omit the record id to create, supply it to update in place. Read the record first when you mean to update, and send only the fields you intend to change — an upsert overwrites what you restate.\n- Prefer `save_issue_label`, `save_project_label`, and `save_initiative_label` for label upserts. The deprecated `create_issue_label` and `create_initiative_label` remain create-only writes. Resolve existing labels with the corresponding `list_*_labels`; when updating issue or project labels, `teamId` disambiguates a name and cannot move the label to another team.\n- `retire_*_label` prevents new uses while preserving labels on existing records. Retiring a group retires its children; restoring a group restores every child, including children retired separately. Check the group and child scope before either lifecycle write.\n- `get_notifications` only reads the authenticated user's inbox. `mark_notification` writes read/unread or snooze state; resolve notification ids from that inbox before marking.\n- Read `get_diff` before `update_diff` and send only intended changes. Combined updates can partially succeed: inspect the result and reread before deciding whether any remaining change needs another call; never blindly replay the whole write. Use `merge_diff` to merge and `submit_diff_review` to approve or request changes.\n- Projects, milestones, and initiatives nest: initiatives contain projects, projects contain milestones and issues, and cycles are per-team time boxes. Scope a search by team or project rather than listing the workspace and filtering afterwards.\n- List tools paginate with a cursor. Thread the returned cursor for the next page instead of raising the page size, and reduce pages inside `execute_code` before returning them.\n- This workspace's catalog is not the whole product. Customer requests, releases, and code review are plan- and feature-gated, so search the catalog for what this connector actually exposes rather than assuming a tool exists.\n- Linear meters the underlying API per user per hour, shared with everything else that credential does. Reuse discovery results within a run and avoid speculative fan-out.\n- An `auth_required` failure means this connector's Linear authorization is missing or expired: run `authorize_connector` for this connector id, then retry the same call unchanged.",
|
|
4
|
-
"instructionsHeading": "Workspace instructions",
|
|
5
|
-
"fragments": {
|
|
6
|
-
"content": "- Issue arguments use `state`, not `status`. Resolve team-specific states through `list_issue_statuses` and use the value format required by the live input schema.\n- Resolve identity before acting. `list_teams`, `list_users`, `list_projects`, `list_issue_statuses`, and `list_issue_labels` return the ids that create and update arguments expect; do not guess a team, status, label, or assignee id.\n- Issues carry a human identifier like `ENG-123` — team key, dash, number — alongside a UUID. Use the identifier the request gave you and resolve it with `get_issue` or `list_issues` when a tool wants an id; never fabricate an identifier or renumber one.\n- `save_*` tools are upserts: omit the record id to create, supply it to update in place. Read the record first when you mean to update, and send only the fields you intend to change — an upsert overwrites what you restate.\n- Prefer `save_issue_label`, `save_project_label`, and `save_initiative_label` for label upserts. The deprecated `create_issue_label` and `create_initiative_label` remain create-only writes. Resolve existing labels with the corresponding `list_*_labels`; when updating issue or project labels, `teamId` disambiguates a name and cannot move the label to another team.\n- `retire_*_label` prevents new uses while preserving labels on existing records. Retiring a group retires its children; restoring a group restores every child, including children retired separately. Check the group and child scope before either lifecycle write.\n- `get_notifications` only reads the authenticated user's inbox. `mark_notification` writes read/unread or snooze state; resolve notification ids from that inbox before marking.\n- Read `get_diff` before `update_diff` and send only intended changes. Combined updates can partially succeed: inspect the result and reread before deciding whether any remaining change needs another call; never blindly replay the whole write. Use `merge_diff` to merge and `submit_diff_review` to approve or request changes.\n- Projects, milestones, and initiatives nest: initiatives contain projects, projects contain milestones and issues, and cycles are per-team time boxes. Scope a search by team or project rather than listing the workspace and filtering afterwards.\n- List tools paginate with a cursor. Thread the returned cursor for the next page instead of raising the page size, and reduce pages inside `execute_code` before returning them.\n- This workspace's catalog is not the whole product. Customer requests, releases, and code review are plan- and feature-gated, so search the catalog for what this connector actually exposes rather than assuming a tool exists.\n- Linear meters the underlying API per user per hour, shared with everything else that credential does. Reuse discovery results within a run and avoid speculative fan-out.\n- An `auth_required` failure means this connector's Linear authorization is missing or expired: run `authorize_connector` for this connector id, then retry the same call unchanged."
|
|
7
|
-
}
|
|
8
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { type RemoteMcpAuth } from "../../connectors/remote-mcp.js";
|
|
2
|
-
import type { ConnectorCallAdmissionPolicy } from "../../types.js";
|
|
3
|
-
export type MixpanelRegion = "us" | "eu" | "in";
|
|
4
|
-
export declare const MIXPANEL_MCP_ENDPOINTS: Readonly<Record<MixpanelRegion, string>>;
|
|
5
|
-
interface MixpanelCommonOptions {
|
|
6
|
-
/**
|
|
7
|
-
* Human-readable display name; defaults to "Mixpanel (<region>)". The region
|
|
8
|
-
* rides the title because a project lives in exactly one residency and
|
|
9
|
-
* discovery shows the title before anything else.
|
|
10
|
-
*/
|
|
11
|
-
title?: string;
|
|
12
|
-
/** Downstream auth ownership. Defaults to one shared deployment grant. */
|
|
13
|
-
authScope?: "shared" | "personal";
|
|
14
|
-
/** Who should use this account and for what decisions. */
|
|
15
|
-
purpose: string;
|
|
16
|
-
/**
|
|
17
|
-
* Data residency region, selecting the matching official endpoint. A wrong
|
|
18
|
-
* region answers empty rather than wrong, which reads as an empty project.
|
|
19
|
-
*/
|
|
20
|
-
region?: MixpanelRegion;
|
|
21
|
-
/** Account-specific conventions appended to the maintained provider guide. */
|
|
22
|
-
instructions?: string;
|
|
23
|
-
/** Connector-specific inline result limit; omit to inherit the deployment. */
|
|
24
|
-
maxResultBytes?: number;
|
|
25
|
-
/** Serve only read-classified tools on every endpoint. Defaults to false. */
|
|
26
|
-
readOnly?: boolean;
|
|
27
|
-
/**
|
|
28
|
-
* Optional per-runtime policy. API mode defaults to 60 calls/hour and five
|
|
29
|
-
* concurrent calls across all tools and projects. MCP mode has no default:
|
|
30
|
-
* its per-user hourly quota cannot be modeled by one per-runtime counter.
|
|
31
|
-
*/
|
|
32
|
-
callAdmission?: ConnectorCallAdmissionPolicy;
|
|
33
|
-
}
|
|
34
|
-
/** The default hosted MCP connection. Existing auth configurations still work. */
|
|
35
|
-
export interface MixpanelMcpOptions extends MixpanelCommonOptions {
|
|
36
|
-
via?: "mcp";
|
|
37
|
-
/**
|
|
38
|
-
* OAuth by default; static headers support Mixpanel service accounts, and
|
|
39
|
-
* `{ type: "credential" }` takes the same service account as an
|
|
40
|
-
* operator-managed `username:secret` that Connecta frames for the endpoint.
|
|
41
|
-
*/
|
|
42
|
-
auth?: RemoteMcpAuth;
|
|
43
|
-
defaultProjectId?: never;
|
|
44
|
-
}
|
|
45
|
-
/** REST APIs using an operator-managed username:secret service account. */
|
|
46
|
-
export interface MixpanelApiOptions extends MixpanelCommonOptions {
|
|
47
|
-
via: "api";
|
|
48
|
-
auth: {
|
|
49
|
-
type: "credential";
|
|
50
|
-
};
|
|
51
|
-
/** Fills an omitted project_id. Explicit ids still reach other granted projects. */
|
|
52
|
-
defaultProjectId?: number;
|
|
53
|
-
}
|
|
54
|
-
export type MixpanelOptions = MixpanelMcpOptions | MixpanelApiOptions;
|
|
55
|
-
/** Mixpanel hosted MCP by default, or service-account REST with via: "api". */
|
|
56
|
-
export declare const mixpanel: import("../../provider.js").ProviderFactory<MixpanelOptions>;
|
|
57
|
-
/** @deprecated Read `mixpanel.definition.classify` instead. Kept for existing imports. */
|
|
58
|
-
export declare const MIXPANEL_VETTED_CATALOG: import("../../catalog-drift.js").VettedCatalog;
|
|
59
|
-
export {};
|