* docs: remove broken Smithery badge from READMEs
The smithery.ai/badge endpoint returns HTTP 500 with an empty body for
every server, not just Context7. Smithery also removed all badge
documentation from their docs, so the feature looks retired.
The Smithery listing itself is still live and the install section keeps
linking to it, which satisfies Smithery's backlink verification.
* docs: remove broken Star History chart from READMEs
GitHub restricted the stargazers API to repo admins and collaborators on
2026-06-30, so star-history.com can no longer build the chart. The SVG
still returns 200 but renders "GitHub restricted access to star data".
Restoring it would mean embedding a GitHub access token in the chart URL
and handing it to a third party, which we do not want to do.
* fix(cli): write the API key as an Authorization header
Codex resolves a server's auth mode by checking only for
`bearer_token_env_var` or a header literally named `Authorization`
(`auth_status_before_discovery` in codex-rs/rmcp-client/src/auth_status.rs,
mirrored in `create_transport` in rmcp_client.rs). The custom
`CONTEXT7_API_KEY` header matched neither, so Codex fell through to any OAuth
credential stored for the same server name and URL and refreshed it during
startup. A dead refresh token then failed the server with `invalid_grant`
before the API key was ever sent, and re-running setup could not recover it
because setup writes config.toml and never touches the credential store.
The hosted endpoint accepts both header forms, so existing configs keep
working.
Two places keep the legacy header deliberately: the plugin .mcp.json files
default to `${CONTEXT7_API_KEY:-}`, and the server rejects `Bearer` with an
empty token while treating a missing header as anonymous; and `env` blocks in
stdio configs, where the name is an environment variable rather than a header.
* fix(plugins): send the API key via the Authorization header
The Claude and Copilot plugin configs default to `${CONTEXT7_API_KEY:-}`, and
both plugins document that an unset key still works over the anonymous tier.
The Bearer form cannot express that: the server rejects `Bearer` with an empty
token while treating an empty or missing Authorization header as anonymous.
The raw-key form satisfies both states. It is genuinely parsed rather than
ignored, verified by an invalid raw key being rejected, so a set key still
authenticates while an unset one falls back to anonymous as documented.
Once the server treats an empty-token Bearer as no header, these can move to
the `Bearer <key>` form used everywhere else.
* refactor(cli): narrow the Codex OAuth probe and trim its surface
Only `oauth` proves a stored credential exists. `not_logged_in` also covers
"no credential, server merely advertises OAuth", which is the normal state for
anyone who never logged in, so treating it as stale told most users their
config held a credential it did not.
Collapse the module to the two functions the call site needs, derive nothing
from a hand-maintained status list, and skip the subprocess entirely when the
server is not already in Codex's config. Drop the probe timeout to 1.5s and
kill with SIGKILL so it is a real ceiling rather than an intent, since the
result is only an advisory hint.
Lock the plugin manifests' raw-key form behind a test, so normalizing them to
`Bearer` for consistency with the CLI fails loudly instead of silently
breaking anonymous access.
* refactor(cli): drop the Codex OAuth cleanup note
The note existed because re-running setup could not rescue a stuck user. The
Authorization header change in this same branch makes it rescue them: Codex
never reads the stored credential once that header is present, so the
credential is inert and the hint only offered cosmetic cleanup.
Removing it drops a subprocess spawn from a user-facing path and a dependency
on the shape of `codex mcp get --json`, an external contract this repo does not
pin. The reason the header name matters moves to `withHeaders`, where the
decision is encoded.
* docs: add server URL reference to README and all-clients page
The remote server URL was not easily discoverable in the docs.
This surfaces it in the README installation section and in the
all-clients page intro so users can find it without digging
through individual client configurations.
* docs: align all-clients intro with README wording
* docs: restore unlisted client fallback sentence
* Add ChatGPT web and desktop app MCP client examples
Add installation instructions for connecting Context7 as an MCP
connector in ChatGPT (Web) and ChatGPT (Desktop) via Developer Mode.
https://claude.ai/code/session_01GRs4CVcBFNZt1otbGqZKH3
* Add ChatGPT web and desktop app MCP client examples
Add installation instructions for connecting Context7 as an MCP
connector in ChatGPT (Web) and ChatGPT (Desktop) via Developer Mode.
Uses the /mcp/oauth endpoint for seamless OAuth authorization since
ChatGPT connectors natively support OAuth and don't allow custom headers.
https://claude.ai/code/session_01GRs4CVcBFNZt1otbGqZKH3
* Update README.md to reflect changes in Developer Mode and app terminology
---------
Co-authored-by: Claude <noreply@anthropic.com>
* add `ctx7 setup` command for configuring MCP and rules
Adds an interactive setup command that configures the Context7 MCP server
and agent rules for Claude Code, Cursor, and OpenCode. Authenticates via
OAuth, generates an API key, and writes per-agent config files.<noreply@anthropic.com>
* revert auth.ts client ID change
* add changeset for setup command
* fix lint: format import line
- Add Emdash as an orchestration layer for multiple coding agents
- Document Context7 MCP support in Emdash (global toggle, per-workspace enable)
- Reference existing MCP client configuration sections
- Link to Emdash repository
Add Factory as one of the supported MCP client installation options.
Factory's droid CLI supports both HTTP (remote) and stdio (local)
MCP server connections.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Added a new section with step-by-step instructions for configuring Copilot CLI with a remote or local MCP server in the README. This helps users set up the required configuration for using context7 tools with Copilot CLI.