fix(catalog): give HTTP connectors a real tool source (openApiUrl or MCP)#368
Open
neubig wants to merge 1 commit into
Open
fix(catalog): give HTTP connectors a real tool source (openApiUrl or MCP)#368neubig wants to merge 1 commit into
neubig wants to merge 1 commit into
Conversation
…MCP) For each catalog connector whose first connection option was `provider: "http"` with a hand-authored `defaultTool` and no `openApiUrl`, give it a real machine-readable tool source so the full tool set can be generated/discovered instead of a single hardcoded request template: - When the provider publishes an OpenAPI / Google Discovery / API-spec document, add `http.openApiUrl` pointing at it (preferred). - When the provider has an official hosted MCP server and no convenient OpenAPI document, migrate the option to `provider: "mcp"` with a `transport.url` (Streamable HTTP) so tools are discovered live via `tools/list`. In both cases the now-obsolete `http.defaultTool` field is removed. Also remove the dead `defaultTool` from `github`'s `mcp` connection option (MCP discovers tools live; the field was harmless but inconsistent). Connectors that publish no public machine-readable OpenAPI and have no official hosted MCP server are left unchanged and listed in the PR for a human to decide: quickbooks, salesforce, servicenow, shopify, zendesk. Closes #366 Co-authored-by: openhands <openhands@all-hands.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #366.
44 catalog connectors were defined as
provider: "http"with a hand-authoreddefaultTooland noopenApiUrlon their first connection option. ThedefaultToolis a single hardcoded request template that only ever exposesone tool per provider, under-represents the API, and can drift from the real
API surface. This PR gives every affected connector a real, machine-readable
tool source and removes the obsolete
defaultTool.For each affected connector, the first connection option now either:
provider: "http"and gains anhttp.openApiUrlpointing at theprovider's published OpenAPI / Google Discovery / API-spec document so the
full tool set can be generated from the schema (preferred when the provider
publishes a machine-readable spec), or
provider: "mcp"with atransport.urlpointing at theprovider's official hosted MCP server (Streamable HTTP) so tools are
discovered live via
tools/list(used when the provider has an officialhosted MCP server and no convenient OpenAPI document).
In both cases the now-obsolete
http.defaultToolfield is removed.githubis handled separately: itsmcpconnection option carried a deaddefaultTool(MCP discovers tools live, so the field was harmless butinconsistent). That field is removed;
github'sprovider/transportareunchanged.
notionandelevenlabsalready had anopenApiUrland are not touched.Only
integrations/catalog/*.jsonfiles are modified (40 files). All otherfields (OAuth URLs, scopes, auth strategy, categories, logos, keywords, etc.)
are preserved. JSON formatting (2-space indent, trailing newline) matches the
existing files.
Per-connector resolution
Option 1 —
openApiUrladded (keptprovider: "http")https://raw.githubusercontent.com/Asana/openapi/master/defs/asana_oas.yaml(OpenAPI 3.0, officialAsana/openapi)https://developer.atlassian.com/cloud/bitbucket/swagger.json(Swagger 2.0, Atlassian developer docs)https://raw.githubusercontent.com/box/box-openapi/main/openapi.json(OpenAPI 3.0.2, officialbox/box-openapi)https://raw.githubusercontent.com/canva-sdks/canva-connect-api-starter-kit/main/openapi/spec.yml(official Canva Connect SDK repo)https://developer.atlassian.com/cloud/confluence/swagger.json(OpenAPI 3.0.1, Atlassian developer docs)https://raw.githubusercontent.com/discord/discord-api-spec/main/specs/openapi.json(officialdiscord/discord-api-spec)https://raw.githubusercontent.com/figma/rest-api-spec/main/openapi/openapi.yaml(OpenAPI 3.1, officialfigma/rest-api-spec)https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/openapi/openapi_v3.yaml(OpenAPI 3.0, official GitLab repo)https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest(Google Discovery)https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest(Google Discovery)https://www.googleapis.com/discovery/v1/apis/docs/v1/rest(Google Discovery)https://www.googleapis.com/discovery/v1/apis/drive/v3/rest(Google Discovery)https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest(Google Discovery)https://raw.githubusercontent.com/intercom/Intercom-OpenAPI/main/descriptions/0/api.intercom.io.yaml(officialintercom/Intercom-OpenAPI)https://developer.atlassian.com/cloud/jira/platform/swagger.json(OpenAPI, Atlassian Jira platform docs)https://raw.githubusercontent.com/mailchimp/mailchimp-client-lib-codegen/main/spec/marketing.json(official Mailchimp client-lib codegen spec)https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml(Microsoft Graph OpenAPI 3.0.4)https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml(Microsoft Graph OpenAPI 3.0.4)https://raw.githubusercontent.com/netlify/open-api/master/swagger.yml(Swagger 2.0, officialnetlify/open-api)https://raw.githubusercontent.com/okta/okta-management-openapi-spec/master/dist/current/management-minimal.yaml(OpenAPI 3.0.3, official Okta management spec)https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml(Microsoft Graph OpenAPI 3.0.4)https://developers.pipedrive.com/docs/api/v1/openapi.json(Pipedrive developer docs)https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml(OpenAPI 3.0.0, officialplaid/plaid-openapi)https://raw.githubusercontent.com/getsentry/sentry-api-schema/main/openapi-derefed.json(OpenAPI 3.0.3, officialgetsentry/sentry-api-schema)https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml(Microsoft Graph OpenAPI 3.0.4)https://raw.githubusercontent.com/stripe/openapi/master/latest/openapi.spec3.json(OpenAPI 3.0.0, officialstripe/openapi)https://developer.atlassian.com/cloud/trello/swagger.json(Swagger 2.0, Atlassian developer docs)https://openapi.vercel.sh/(OpenAPI 3.0.3, Vercel's own hosted spec)https://raw.githubusercontent.com/XeroAPI/Xero-OpenAPI/master/xero_accounting.yaml(OpenAPI 3.0.0, officialXeroAPI/Xero-OpenAPI)https://raw.githubusercontent.com/zoom/api/master/openapi.v2.json(Swagger 2.0, officialzoom/api)Option 2 — migrated to
provider: "mcp"(official hosted MCP server)https://mcp.airtable.com/mcphttps://mcp.clickup.com/mcphttps://mcp.dropbox.com/mcphttps://mcp.freshdesk.com/mcphttps://mcp.linear.app/mcphttps://mcp.miro.com/mcphttps://mcp.monday.com/mcphttps://mcp.posthog.com/mcphttps://mcp.supabase.com/mcpAll MCP URLs were verified to respond with
401/405(i.e. a liveauthenticated MCP endpoint) rather than a 404/redirect, and each is documented
by the provider as their official hosted MCP server (Streamable HTTP).
githubOnly the dead
defaultToolwas removed from itsmcpoption.provider/transport/http.apiBaseUrlare unchanged.Could not resolve (left unchanged — need a human)
These connectors publish no public machine-readable OpenAPI and have no
official hosted MCP server. Per the issue instructions they are left
unchanged (their
defaultToolremains) and listed here for a human to decide:@shopify/dev-mcp(docs search, not the Admin REST API); no clean public OpenAPI for the Admin REST API and no hosted HTTP MCP server.mcp.zendesk.comredirects to the help center (no MCP); Zendesk publishes no public machine-readable OpenAPI spec for its REST API.Verification
A Python scan (
/tmp/verify_catalog_366.py, not committed) overintegrations/catalog/*.jsonasserts:httpconnection option has adefaultToolwithout anopenApiUrl(except the 5 unresolved connectors above, which are intentionally left
unchanged and listed).
github'smcpoption has nodefaultTool.openApiUrlor isprovider: "mcp"with atransport.url.Result:
(
notion#0keeps itsdefaultToolbecause it already had anopenApiUrlandis explicitly out of scope per the issue.)
The repo's existing test suite passes unchanged (no test referenced
defaultTool):git status -sbshows only the 40 catalog JSON files modified.This PR was created by an AI agent (OpenHands) on behalf of @neubig.