diff --git a/docs/CONNECTOR-ONBOARDING.md b/docs/CONNECTOR-ONBOARDING.md index 196191a5..c7f335a2 100644 --- a/docs/CONNECTOR-ONBOARDING.md +++ b/docs/CONNECTOR-ONBOARDING.md @@ -74,7 +74,9 @@ is the validation. whose live metadata said so on 2026-09-10 — GitHub (measured first: a secretless exchange answers `incorrect_client_credentials`, #1006), Slack, HubSpot, Zoom, Box, Asana, Docusign, Front, Wrike, Xero, AlloyDB and the - eight Google Workspace servers. Left off `amazon-ads` and `doordash`, whose + eight Google Workspace servers — and Sage Intacct, whose metadata the + 2026-09-14 catalog audit read the same way (no registration endpoint, no + `none`). Left off `amazon-ads` and `doordash`, whose metadata lists `none`, and off five of the six `tenant` entries, whose URL cannot be probed without a tenant. Azure DevOps is the sixth: its protected-resource metadata is organization-agnostic and names Microsoft diff --git a/internal/clientconfig/builtin_remote_catalog.yaml b/internal/clientconfig/builtin_remote_catalog.yaml index d70a6513..7ce664a1 100644 --- a/internal/clientconfig/builtin_remote_catalog.yaml +++ b/internal/clientconfig/builtin_remote_catalog.yaml @@ -2959,7 +2959,7 @@ servers: find missing receipts, and analyze trends. Read-only — cannot approve reports, edit expenses, reimburse, or change workspace settings. OAuth 2.1 with PKCE. - url: "https://www.expensify.com/mcp" + url: "https://www.expensify.com/mcp/" vendor: Expensify, Inc. docs_url: "https://help.expensify.com/articles/new-expensify/connections/connect-ai-assistants/Connect-Claude-to-Expensify-Using-MCP" category: finance @@ -3056,7 +3056,7 @@ servers: tools over SEC filings, earnings-call transcripts, financial metrics, private/public market data, deep research, and prediction-market research. OAuth recommended; a non-OAuth variant embeds the API key in the path. - url: "https://mcp.octagonagents.com/mcp" + url: "https://mcp.octagonai.co/mcp" vendor: Octagon AI, Inc. docs_url: "https://octagonai.co/docs/guide/mcp-server" repo_url: "https://github.com/OctagonAI/octagon-mcp-server" @@ -3105,6 +3105,17 @@ servers: tags: [accounting, erp, general-ledger, read-only] provenance: official auth: oauth + client_registration: manual + client_secret: required + setup_hint: >- + Sage Intacct's authorization server registers no clients itself and + accepts no public clients, so an administrator creates an OAuth client + for fleet in Sage Intacct (an AI-Enabled Web Services Developer License + is required — see the setup guide), registers the callback URL shown in + this form as its redirect URI, and pastes the client ID and client + secret here. Sign in afterwards with the Intacct user the connector + should act as. + setup_url: "https://developer.sage.com/intacct/mcps/intacct-mcp/latest/intacct-mcp-server/setup-and-connection-guide" - name: thirdweb display_name: thirdweb description: >- @@ -3182,7 +3193,9 @@ servers: Official hosted MCP for Zerodha brokerage accounts: market quotes, historical data, instrument search, holdings, positions, margins and read- only order/GTT data. The hosted instance deliberately excludes - place/modify/cancel order tools; SSE also available at /sse. + place/modify/cancel order tools. No OAuth at the transport: the server + answers unauthenticated and the user signs in through its `login` tool, + which returns a Kite login link to open in the browser. url: "https://mcp.kite.trade/mcp" vendor: Zerodha Broking Ltd. docs_url: "https://zerodha.com/products/mcp/" @@ -3190,7 +3203,11 @@ servers: category: finance tags: [trading, brokerage, portfolio, market-data, india] provenance: official - auth: oauth + auth: open + setup_hint: >- + Nothing to enter: add the server, then ask the assistant to call the + Kite `login` tool and open the link it returns to sign in with your + Zerodha credentials. The session lives on Kite's side. # ── design-media ──────────────────────────────────────────────── - name: adobe-creativity @@ -3539,7 +3556,9 @@ servers: display_name: Globalping description: >- Run real network measurements (ping, traceroute, DNS, MTR, HTTP) from - thousands of probes worldwide. Works unauthenticated at lower rate limits. + thousands of probes worldwide. OAuth sign-in with a Globalping account + (the server registers fleet as a client itself; higher rate limits than + the former anonymous access). url: "https://mcp.globalping.dev/mcp" vendor: Volentio JSD Limited (jsDelivr) docs_url: "https://github.com/jsdelivr/globalping-mcp-server" @@ -3547,7 +3566,7 @@ servers: category: observability tags: [network, ping, traceroute, dns, latency] provenance: official - auth: open + auth: oauth - name: grafana-cloud display_name: Grafana Cloud description: >- @@ -3934,7 +3953,7 @@ servers: cloning/localization, pronunciation dictionaries, and credit usage. OAuth sign-in via play.cartesia.ai; the org must have at least one API key provisioned for the hosted server to work. - url: "https://mcp.cartesia.ai" + url: "https://mcp.cartesia.ai/mcp" vendor: Cartesia AI, Inc. docs_url: "https://docs.cartesia.ai/integrations/mcp" category: ai-ml @@ -4075,7 +4094,7 @@ servers: rankings, benchmarks, docs search, and billable test messages. url: "https://mcp.openrouter.ai/mcp" vendor: OpenRouter, Inc. - docs_url: "https://openrouter.ai/docs/mcp-server" + docs_url: "https://openrouter.ai/docs/mcp" category: ai-ml tags: [models, llm, routing, pricing] provenance: official diff --git a/internal/clientconfig/remote_catalog_test.go b/internal/clientconfig/remote_catalog_test.go index e2be9134..7ea6e1ed 100644 --- a/internal/clientconfig/remote_catalog_test.go +++ b/internal/clientconfig/remote_catalog_test.go @@ -436,7 +436,7 @@ func TestBuiltinRemoteCatalogClientSecretRequired(t *testing.T) { secretRequired := []string{ "alloydb", "asana", "azure-devops", "box", "docusign", "front", "github", "google-calendar", "google-chat", "google-docs", "google-drive", "google-gemini-agent-platform", "google-gmail", "google-people", - "google-sheets", "google-slides", "hubspot", "slack", "wrike", "xero", "zoom", + "google-sheets", "google-slides", "hubspot", "sage-intacct", "slack", "wrike", "xero", "zoom", } for _, name := range secretRequired { e, ok := byName[name]