Commit Graph

200 Commits

Author SHA1 Message Date
Enes Gules a667712ae2 CTX7-1442 (#2334) 2026-03-27 10:21:53 +03:00
Enes Gules be1a39acb9 feat: enhance Context7 server configuration with website URL, description, and detailed usage instructions (#2319)
* feat: enhance Context7 server configuration with website URL, description, and detailed usage instructions

* run format

* add changeset

* feat: align MCP server instructions with eval-proven trigger language

Based on invocation routing benchmarks (60 queries, clean + mid-session):
- Named specific libraries to counter confidence skip
- Added 'even when you think you know the answer' override
- Added 'prefer over web search' to catch WebSearch fallback
- Unified trigger paragraph to match client rule format
- Added explicit 'do not use for' negatives

---------

Co-authored-by: Fahreddin Özcan <ozcanfahrettinn@gmail.com>
2026-03-27 10:18:07 +03:00
github-actions[bot] f614e497ec chore(release): version packages (#2280)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-19 17:14:26 +03:00
Fahreddin Özcan c3c2647029 fix(cli): use ~/.agents/skills for global universal skill installs (#2281)
* fix(cli): use ~/.agents/skills for global universal skill installs

The universal global path was ~/.config/agents/skills, but the
canonical standard (used by Vercel's skills CLI and OpenAI Codex)
is ~/.agents/skills. This aligns context7 with the broader ecosystem.

Fixes #2276

* chore: add changeset for global skills path fix
2026-03-19 17:13:58 +03:00
Matt Van Horn 93eaf54b75 fix(cli): remove shell:true from spawn in generate command (#2270)
* fix(cli): remove shell:true from spawn in generate command

Removes shell:true from the child_process.spawn() call that opens
the user's editor. The editor path and preview file path are already
passed as separate arguments, so shell interpolation is unnecessary.
Using shell:true allows shell metacharacters in EDITOR or file paths
to be interpreted, which is a command injection vector.

Fixes #2240

This contribution was developed with AI assistance (Claude Code).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: add changeset for shell:true removal

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Fahreddin Özcan <ozcanfahrettinn@gmail.com>
2026-03-19 16:00:39 +03:00
Spidershield-contrib 8c5cf7d629 fix(cli): prevent directory traversal in skill file installation (#2235)
* fix(cli): prevent directory traversal in skill file installation

installSkillFiles() used path.join() with unsanitized file paths from
GitHub API responses. A malicious skill repository could include files
with "../" sequences in their paths, allowing writes outside the
intended skill directory.

Changes:
- installer.ts: use path.resolve() and verify the resolved path stays
  within the skill directory boundary before writing
- github.ts: reject file paths containing ".." at download time as an
  additional defense-in-depth check

* chore: add changeset for directory traversal fix

* fix: format installer.ts to pass prettier lint

---------

Co-authored-by: Fahreddin Özcan <ozcanfahrettinn@gmail.com>
2026-03-19 15:48:08 +03:00
Matt Van Horn 2070cb1670 fix(mcp): support NODE_EXTRA_CA_CERTS for enterprise MITM proxies (#2271)
* fix(mcp): support NODE_EXTRA_CA_CERTS for enterprise MITM proxies

When NODE_EXTRA_CA_CERTS is set, reads the CA certificate file and
injects it into undici's global dispatcher. This fixes fetch failures
behind enterprise transparent SSL intercept proxies (Zscaler, etc.)
where the default TLS context does not trust the corporate CA.

The CA certs are also passed through when an explicit HTTPS_PROXY is
configured, so both proxy modes work with custom certificates.

Fixes #2268

This contribution was developed with AI assistance (Claude Code).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: add changeset for NODE_EXTRA_CA_CERTS support

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Fahreddin Özcan <ozcanfahrettinn@gmail.com>
2026-03-19 15:32:45 +03:00
github-actions[bot] 1dfb931d0e chore(release): version packages (#2217)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-16 13:25:53 +03:00
Fahreddin Özcan 4b63117e5f fix(cli): reorder setup mode choices to show MCP server first (#2243)
* fix(cli): reorder setup mode choices to show MCP server first

* chore: add changeset for setup mode reorder
2026-03-16 13:18:11 +03:00
Fahreddin Özcan 18b3292d01 fix(cli): add token refresh and centralize auth constants (#2210)
* fix(cli): add token refresh support and centralize auth constants

Expired OAuth tokens are now automatically refreshed via getValidAccessToken()
instead of silently failing. CLI_CLIENT_ID moved to constants.ts to avoid
duplication across auth.ts and setup.ts.

* refactor(cli): internalize baseUrl and clientId in refreshAccessToken

Make refreshAccessToken a private function that resolves getBaseUrl()
and CLI_CLIENT_ID internally instead of requiring them as parameters.

* test(cli): add unit tests for auth utilities and commands

Add comprehensive vitest test suite covering OAuth PKCE flow, token
persistence, token refresh, and CLI auth commands (login/logout/whoami).

* chore: add changeset for CLI auth improvements

* refactor: move CLI auth tests to src/__tests__/

Move auth test files from colocated __tests__ directories to a
centralized src/__tests__/ directory, adjusting mock import paths
accordingly.
2026-03-16 13:03:33 +03:00
Fahreddin Özcan fae61278d2 feat(cli): add teamspace name to whoami command (#2209)
* feat(cli): add teamspace name to whoami command

Replace direct Clerk userinfo call with new /api/dashboard/whoami
endpoint that returns name, email, and active teamspace in one request.

* chore: add changeset for whoami teamspace feature
2026-03-13 12:21:48 +03:00
github-actions[bot] c3728bbd01 chore(release): version packages (#2198)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-12 01:02:02 +03:00
Fahreddin Özcan 7e60d05551 feat(cli): track install count events on setup command (#2197) 2026-03-11 15:00:45 -07:00
github-actions[bot] 87892eda99 chore(release): version packages (#2190)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-11 17:14:59 +03:00
Fahreddin Özcan 62dc278b76 feat(cli): enumerate popularity and trust in skill search results (#2192)
* feat(cli): enumerate popularity and trust in skill search results

Replace raw install counts with star-based popularity rating (★☆☆/★★☆/★★★)
and numeric trust scores with High/Medium/Low labels in skill search,
install, and suggest commands. Show install range and raw trust score
in the hover description. Also reorder setup command to show CLI before MCP.

* feat(cli): use 4-star popularity scale matching install count ranges

* fix(cli): replace hardcoded "docs" with "find-docs" in setup output

* chore: add changeset for skill search enumeration and find-docs rename
2026-03-11 17:05:58 +03:00
Fahreddin Özcan 04130b5596 refactor(skills): consolidate skills under /skills with canonical sources (#2191)
* refactor(skills): consolidate skills under /skills with canonical sources

- Rename skills/docs → skills/find-docs (name: find-docs)
- Rename skills/ctx7-cli → skills/context7-cli (name: context7-cli)
- Add skills/context7-mcp as canonical MCP skill source
- Rename plugin skill folders to context7-mcp and unify name to context7-mcp
- MCP setup now downloads context7-mcp skill from GitHub instead of using hardcoded SKILL_CONTENT
- Remove SKILL_CONTENT from templates.ts — skills/context7-mcp/SKILL.md is the single source of truth
- Add Error Handling section to find-docs skill for quota errors
- Update agents.ts skill name: documentation-lookup → context7-mcp
- Update docs/clients/cli.mdx and setup references accordingly

* chore: add changeset for skills consolidation

* fix(skills): update plugin skill frontmatter name and setup docs to context7-mcp
2026-03-11 16:17:10 +03:00
Fahreddin Özcan d418405f85 feat(cli): add CLI + Skills mode to ctx7 setup (#2187)
* feat(cli): add CLI mode to ctx7 setup with docs skill installation

- Add MCP vs CLI mode selection prompt at the start of setup
- CLI mode authenticates user and installs docs skill via promptForInstallTargets
- Add --cli, --universal, --antigravity flags to setup command
- --yes skips the detected-locations confirmation prompt
- Default CLI install scope to global (override with --project)
- Fix checkbox selected choices to render in green (consistent with select prompt)
- Move Claude Code above Universal in IDE selection order
- Add forceUniversal=false option to promptForInstallTargets for setup flow
- Add yes? to AddOptions to support auto-confirm in promptForInstallTargets

* chore: add changeset for ctx7 setup CLI mode

* feat(cli): rename CLI mode to CLI + Skills, add --mcp flag, remove recommended label

* feat(cli): add --api-key support to CLI mode and update docs

- Pass apiKey through to resolveCliAuth in CLI mode setup
- Store provided API key as bearer token for subsequent API calls
- Update cli.mdx and setup.md to reflect both MCP and CLI + Skills modes

* docs: update setup docs to reflect --api-key for both modes and --cursor for CLI

- --api-key works in both MCP and CLI + Skills mode (not MCP-only)
- --oauth clarified as MCP-only
- Added --cursor to CLI + Skills mode examples (Cursor has a skills directory)
- Updated auth table row for ctx7 setup

* fix(cli): improve library ID validation and add telemetry headers

- Validate /owner/repo format locally before spinner starts, showing
  consistent error + hint for both "react" and "/react" inputs
- Send X-Context7-Source, X-Context7-Client-IDE, X-Context7-Client-Version,
  and X-Context7-Transport headers on library/docs requests so CLI
  appears in the admin telemetry dashboard
2026-03-11 14:05:15 +03:00
github-actions[bot] 945f9aec8b chore(release): version packages (#2183)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-10 17:20:02 +03:00
Fahreddin Özcan 9aae852681 feat(cli): show source repo in skill search results (#2185)
* feat(cli): show source repo next to skill name in search and suggest results

Adds the project repo in parentheses after each skill name to help
disambiguate skills with identical names from different repositories.

* chore: add changeset for repo display in skill search

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 17:19:12 +03:00
Enes Gules 9de3f0627c feat: add searchFilterApplied field to LibrarySearchResponse and SearchResponse interfaces; add warnings to cli and mcp (#2160) 2026-03-10 17:15:55 +03:00
Fahreddin Özcan 05a440600a fix(cli): remove default universal selection on skills install prompt (#2184) 2026-03-10 16:17:13 +03:00
Fahreddin Özcan 31b4fb8435 feat(cli): add docs skill and align CLI output with MCP format (#2176)
* feat(docs): add dedicated docs skill and restructure CLI documentation

- Add new `docs` skill as a single-file skill for documentation retrieval
- Align skill prompts with MCP tool descriptions (selection process, query guidance, 3-call limit)
- Enrich CLI docs page with result fields, query tips, and version-specific IDs
- Move CLI page to Overview section in docs nav
- Make `query` required for `ctx7 library` across all skills and docs
- Update trust score display label in skills.mdx

* feat(cli): align library output format with MCP labels

Use labeled fields and categorical Source Reputation labels
(High/Medium/Low/Unknown) instead of numeric trust scores to match
the MCP transport format.

* refactor: move skills from .agents/skills to skills/ at repo root

Source-control location for skills — users install them into
.agents/, .claude/, etc. via the CLI. Also updates install
instructions to use `npm install -g ctx7@latest` or `npx ctx7@latest`.

* docs: use natural-language query examples across skills and CLI docs

Replace keyword-style queries ("useEffect cleanup") with full
question-style queries ("How to clean up useEffect with async
operations") to better demonstrate how the query parameter works.

* docs: fix trust score description to show numeric range
2026-03-10 16:04:05 +03:00
github-actions[bot] ffb14fd426 chore(release): version packages (#2128)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-06 16:21:30 +03:00
Fahreddin Özcan df60e3e20e feat(cli): add resolve and query commands for library documentation (#2119)
* feat(cli): add resolve and query commands for library documentation

Expose Context7's resolve-library and query-docs API as CLI commands,
enabling agents and developers to fetch documentation directly from
the terminal without MCP setup.

- `ctx7 resolve <library> [query]` - resolve library name to Context7 ID
- `ctx7 query <libraryId> <query>` - fetch documentation for a library
- Both support --json for structured output
- TTY-aware: spinners and colors in terminal, clean output when piped
- Auth: CONTEXT7_API_KEY env var > OAuth token > unauthenticated

* refactor(cli): rename resolve/query to library/docs commands

Rename commands for a more natural CLI interface:
- `ctx7 library <name> [query]` instead of `ctx7 resolve`
- `ctx7 docs <libraryId> <query>` instead of `ctx7 query`

* fix(cli): show benchmark score and all versions in library results

* chore: add changeset for library and docs commands

* style(cli): fix lint formatting in api.ts

* refactor(cli): remove redundant spinner success messages

The output itself is self-evident, no need for "Found 5 libraries"
or "Documentation retrieved" messages.
2026-03-06 16:18:16 +03:00
Bryan Thompson ceac1a5356 fix(mcpb): Update manifest to v0.3 spec and switch to npx-based bundle (#1488)
Co-authored-by: triepod-ai <199543909+triepod-ai@users.noreply.github.com>
Co-authored-by: enesgules <abdullah.enes.gules@gmail.com>
2026-03-06 04:03:48 +03:00
github-actions[bot] 7e0309b718 chore(release): version packages (#2100)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-04 15:51:01 +03:00
Fahreddin Özcan 59d0327b07 feat(mcp): include source field in search result response (#2031)
* feat(mcp): include source field in search result response

* chore: add changeset
2026-03-04 15:49:25 +03:00
Fahreddin Özcan 9523522d33 fix: reject GET requests on MCP endpoints to eliminate idle SSE timeouts (#2099)
* fix: reject GET requests on MCP endpoints to eliminate idle SSE timeouts

Stateless MCP server does not send server-initiated notifications, so
GET SSE streams sit idle until NGINX proxy_read_timeout (3600s) kills them.
Humio data shows ~4M GET timeouts vs 69 actual POST tool calls over 2 days,
accounting for 99.997% of all 5XX errors.

Returning 405 is spec-compliant per MCP StreamableHTTP (2025-03-26).

* chore: add changeset for MCP GET rejection fix

* refactor: move GET rejection into handleMcpRequest and fix error code

- Consolidate GET check into handleMcpRequest to avoid duplication
- Fix JSON-RPC error code from -32601 (method not found) to -32000 (server error)
2026-03-04 15:45:08 +03:00
github-actions[bot] 76d70a1223 chore(release): version packages (#1956)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-23 13:06:21 +03:00
enesgules e81f7e3c8c fix: formatting 2026-02-23 13:04:15 +03:00
enesgules 617d8edb87 Remove unnecessary warning from encryption key validation and update tool descriptions for clarity. 2026-02-23 13:01:03 +03:00
enesgules d2c34b04c3 Update installation commands across multiple languages to include the --scope user flag for Context7 in Claude Code. 2026-02-20 16:41:09 +03:00
Enes Gules e3416985e8 Move explanation in tool responses into the description (#1892)
* Update tool descriptions in index.ts for clarity on library ID resolution process

* Move explanation in tool responses into the description
2026-02-19 06:01:25 -08:00
Enes Gules 1a52cb918e Update tool descriptions in index.ts for clarity on library ID resolution process (#1890) 2026-02-18 14:35:45 -08:00
Enes Gules 2427fb2710 Update OpenAPI documentation (#1862)
Remove unused `vip` field from LibrarySearchResult interface.
2026-02-18 17:49:05 +03:00
github-actions[bot] 87109e5e78 chore(release): version packages (#1884)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-18 16:34:10 +03:00
Fahreddin Özcan c66950a582 feat(cli): install documentation-lookup skill during ctx7 setup (#1882)
* feat(cli): install documentation-lookup skill during ctx7 setup

The setup command now installs the Context7 documentation-lookup skill
alongside the MCP server and rule for each agent.

Skill paths per agent:
- Claude: .claude/skills/documentation-lookup/SKILL.md
- Cursor: .cursor/skills/documentation-lookup/SKILL.md
- OpenCode: .agents/skills/documentation-lookup/SKILL.md (universal)

* chore: add changeset for skill install in setup
2026-02-18 16:31:28 +03:00
github-actions[bot] 9422500301 chore(release): version packages (#1858)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-16 17:18:36 +03:00
Fahreddin Özcan 3d6619128c add ctx7 setup command (#1851)
* 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
2026-02-16 17:17:33 +03:00
milosz-l 22057ba0f0 docs: add --scope user to Claude Code install commands (#1812) 2026-02-13 18:08:59 +03:00
Ryan Cavanaugh cafa4f3d4d Remove deprecated downlevelIteration option (#1684) 2026-02-13 18:02:52 +03:00
enesakar de4ae29933 update prompt for better privacy 2026-02-11 06:36:47 +03:00
enesakar b3c7192173 update prompt for better privacy 2026-02-11 06:36:22 +03:00
github-actions[bot] 2be9193ed4 chore(release): version packages (#1774)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-10 13:13:40 +03:00
Fahreddin Özcan 4663c15552 feat(cli): adopt .agents/skills as universal install target (#1730)
* feat(cli): adopt .agents/skills as universal install target

Install to .agents/skills/ by default as the shared standard directory.
Universal agents (Amp, Codex, OpenCode, Gemini CLI, GitHub Copilot) all
read from this path natively. Vendor-specific agents (Claude Code, Cursor,
Antigravity) get symlinks pointing back to .agents/skills/.

- Add "universal" as a first-class IDE type across all path maps
- Auto-detect .agents/ and vendor dirs: detected → confirm, nothing
  detected → checkbox picker with Universal pre-checked
- Update list/remove commands to check universal + vendor-specific dirs
- Update DEFAULT_CONFIG.defaultIde from "claude" to "universal"
- Show labeled install summary (Universal, Claude Code, etc.) with paths

* feat(cli): consolidate agent flags into single --universal option

Replace --codex, --opencode, and --amp flags with a single --universal flag that points to .agents/skills/. This simplifies the CLI interface since these agents all share the same installation path.

* refactor(cli): simplify IDE types and remove UNIVERSAL_AGENTS Set

- Simplify IDE type from 7 types to 4 (remove codex, opencode, amp)
- Remove UNIVERSAL_AGENTS Set and replace with direct equality checks
- Update documentation to add --universal flag examples throughout
- Consolidate Supported Clients table to show single Universal row

All universal agents (Amp, Codex, Gemini CLI, GitHub Copilot, OpenCode, etc.)
are now represented by the single "universal" type since they're functionally
identical and use the same .agents/skills/ directory.

* docs(skills): update CLI flags to use --universal

- Replace --codex, --opencode, --amp flags with single --universal flag
- Update all command examples (install, list, remove, suggest, generate)
- Consolidate Supported Clients table with Universal at top
- Reorder tables to prioritize Universal agents
2026-02-10 13:12:40 +03:00
Fahreddin Özcan e49e41819f docs: add telemetry opt-out documentation (#1705)
Document how to disable CLI telemetry using the CTX7_TELEMETRY_DISABLED
environment variable in both the CLI README and skills documentation.
2026-02-05 22:50:40 +03:00
github-actions[bot] 61e7fcdc76 chore(release): version packages (#1671)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-03 17:36:58 +03:00
Fahreddin Özcan 098165649f feat(cli): use backend suggest endpoint (#1667)
* discover

* feat(cli): use backend suggest endpoint for skill suggestions

Replace client-side NOTABLE_SET filtering with a single POST request to
/api/v2/skills/suggest. The backend now handles SKIP_SET filtering,
vector search, install count enrichment, and ranking.

- Remove NOTABLE_SET/SKIP_SET from deps.ts
- Add suggestSkills API function
- Add SuggestGroup and SuggestResponse types
- Simplify suggestCommand to use backend response

* feat(cli): send auth token with suggest request

Pass the user's OAuth token (if logged in) when calling the suggest
endpoint so the request counts against their quota.

* chore: add changeset

* refactor: simplify suggest API usage

- Remove ecosystem field from deps detection
- Use flat skills array from backend instead of groups
- Simplify display logic

* fix: use white color for Relevant value in metadata panel

* refactor: rename DiscoverOptions to SuggestOptions
2026-02-03 17:28:29 +03:00
github-actions[bot] d27c85982b chore(release): version packages (#1657)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-02 15:49:48 +03:00
Fahreddin Özcan 6328ed154e feat(cli): improve skill search display and revamp generate UX (#1618)
* feat(cli): add trust score column and improve skill search display

Add trust score and installs columns with aligned headers to skill search results.
Trust scores use yellow/red color coding (0-10 scale).

* chore: add changeset for trust score column

* feat(cli): auto-login when generate requires authentication

Extract login flow into reusable `performLogin()` function.
Generate command now triggers OAuth login automatically instead of
showing an error asking the user to run 'ctx7 login' manually.

* feat(cli): show recommended option first in generate questions

Reorder options so the recommended answer is always displayed at
position 1 with cursor starting on it, regardless of original index.

* feat(cli): open generated skill in default editor instead of inline view

Replace inline terminal "View full skill" with "View skill" that opens
the content in the system default editor ($EDITOR or 'open' fallback)
via a temp file.

* feat(cli): revamp generate UX with improved copy and examples

Update skill generation flow:
- Show do/don't examples (✕/✓) for skill descriptions
- Rename "libraries" to "sources" in user-facing text
- Add explanation of what sources are used for
- Update spinner text for questions and generation steps
- Remove unused libraryNames variable

* chore: update changeset to include generate UX changes

* fix(cli): show dash placeholder for missing installs and trust scores

* feat(cli): add external link icon to terminal hyperlinks and show dash for empty fields

* feat(cli): improve view/edit skill with persistent edits and preview cleanup

Save preview files to ~/.context7/previews/ instead of OS temp dir, read
edits back before install, and clean up preview files on exit.

* feat(cli): improve generate UX copy and flow polish

Update skill generation flow with clearer descriptions, better spinner
messages, and improved finalize menu options.

* fix(cli): fix stale editor preview, install count side effect, and editor spawn

- Reset previewFileWritten between regeneration cycles so editor shows fresh content
- Add placeholder param to formatInstallCount to avoid showing "-" in list command
- Replace execFile with spawn for proper $EDITOR support (terminal editors, args)
- Move trustScore to Skill base type and remove redundant installCount from SkillSearchResult
2026-02-02 15:46:34 +03:00