Skip to content

Releases: pioner92/symbolpeek-mcp

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 24 Jul 09:00

Added

  • rename_symbol (.ts, .tsx, .js, .jsx) — the first write-capable
    tool. Resolves the symbol like find_references, then applies TypeScript's own
    findRenameLocations across every project file and writes the edits to disk in
    one call, returning the rewritten locations as a diff for review. Refuses the
    whole rename — no partial write — when any location falls outside the project
    (a .d.ts or node_modules declaration), and rejects an invalid or reserved
    new_name before the worker round trip.
  • check_safe_to_delete (.ts, .tsx, .js, .jsx) — read-only. Answers
    "is any top-level declaration in this file referenced from another file?" in a
    single call, replacing a find_references sweep over every export. Returns
    safe: true only when nothing is used elsewhere, otherwise the blocking
    cross-file references.

Changed

  • Agent-facing text (tool descriptions, the tool_handler instructions string,
    the packaged skill) is now held to a minimum-token bar, formalized as design
    constraint #4 in ARCHITECTURE.md and a repo-root CLAUDE.md for future
    contributors: this text is injected into a model's context on every call, so
    compact rows beat prose.

Install

curl -fsSL https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.sh | sh
irm https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.ps1 | iex

Then connect the server to your client — the installer prints the exact command.
See the README for requirements and troubleshooting.

Full Changelog: v0.4.2...v0.4.3

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 23 Jul 08:17

Added

  • Markdown support (.md, .markdown). Headings are the symbols, nested by
    level, and a symbol spans its whole section rather than the heading line, so
    read_symbol with Quick start.Connect your client returns that section —
    839 bytes instead of this project's 20 KB README. Both # and underline
    (setext) headings are indexed, a # inside a fenced code block is not, and
    repeated headings receive @line:column selectors. read_symbol,
    list_symbols, search_symbols, and get_document_outline are supported;
    the semantic operations do not apply to prose and report as unsupported.

Fixed

  • A registered language could be rejected by the filesystem boundary. The
    set of supported extensions was written out twice — once by the provider
    registry and once as a literal list in load_source — so a newly registered
    language was accepted through the MCP entry point and refused through the
    public API. The boundary now derives its list from the registry, and a test
    asserts the two agree.
  • The [.ts/.tsx/...] marker on each tool description — the only place an agent
    learns which files a tool accepts — is hand-written and was a third copy of
    the same set. It now has a test that derives the expectation from the
    registry, which immediately caught .markdown being supported but never
    advertised.
  • Python definitions guarded by control flow were missing entirely. A
    function or class inside if, try, with, or a loop was absent from
    get_document_outline and unreachable by read_symbol, so the standard
    try: from _fast import loads / except ImportError: def loads(...) fallback
    had no addressable symbol. Python has no block scope, so these are indexed in
    their enclosing module or class.
  • Duplicate names were unreachable outside TypeScript too. Java overloads,
    repeated Go init functions, and #[cfg]-gated Rust twins were listed by the
    outline while read_symbol answered with candidates like E.a at line 2
    a label, not a name that could be sent back. They now receive the same
    @line:column occurrence selectors TypeScript uses, and every reported
    candidate reads back.
  • Composing a path from an outline now resolves for Rust impl blocks:
    impl Client.send reaches the declaration whose canonical name is
    Client.send.
  • The occurrence selector was not always unique, so some names the outline
    reported still could not be read back.
    Running the indexer over the Go and
    Python standard libraries surfaced three cases the earlier disambiguation
    missed: declarations sharing one source position (var _, _ = …, both blanks
    anchored to the spec), a property getter/setter pair stranded when their
    enclosing class was itself disambiguated, and a top-level name whose leaf
    display collided with another declaration (a Go method shown as foo beside a
    top-level const foo). A final uniqueness pass now closes the invariant
    unconditionally — every name distinct, every sibling display_name distinct,
    with a #ordinal when declarations genuinely share a position — and the Go and
    Python standard libraries are exercised as real-world corpora in the test
    suite.

Changed

  • Tree-sitter languages (Rust, Python, Java, Go) no longer map byte offsets to
    line/column by scanning from the start of the file for every declaration,
    which was quadratic in file size. A 16k-declaration file went from 5.2s to
    0.2s, and outline time is now linear in file size.
  • The embedded Tree-sitter runtime moved from 0.25 to 0.26. The bundled grammars
    are unaffected — they bind through tree-sitter-language rather than the core
    crate — and no provider behaviour changed.
  • Outline snapshots now cover every Tree-sitter language. They previously
    covered only TypeScript, so a change in the shared Tree-sitter backend could
    drop a declaration for the other providers without failing a test.

Install

curl -fsSL https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.sh | sh
irm https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.ps1 | iex

Then connect the server to your client — the installer prints the exact command.
See the README for requirements and troubleshooting.

Full Changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 22 Jul 19:36

Fixed

  • Symbols that no name could reach. When two distinct declarations produced
    the same qualified name, read_symbol answered with an ambiguity error whose
    only candidate was the name just asked for — a dead end with no way to reach
    either declaration. Reading Object, Array, String, Math, or JSON
    from the bundled lib.es5.d.ts failed this way, as did any file combining
    interface X with declare var X. Such declarations now receive
    @line:column occurrence selectors, and the ambiguity error lists them in
    source order.
  • Callbacks inside destructured calls lost their container. Only the
    react-query mutate alias produced a qualified container; SWR's trigger,
    Apollo's tuple form, and arbitrary property names collapsed sibling callbacks
    onto one unreachable name. The container is now selected structurally, so
    EventCreation.onCreateEvent.onSuccess resolves across all of these shapes.
  • search_symbols ranges cover the full declaration instead of just the name,
    and now agree with read_symbol and get_document_outline.
  • Function-valued object properties report arrow_function or
    react_component rather than object_method, matching the other tools.
  • get/set accessor pairs merge into one property; unrelated declarations
    that happen to share a name no longer merge into one span.

Changed

  • Large files are dramatically faster: converting UTF-16 positions to byte
    offsets rescanned the file from the start on every call, which made every
    operation quadratic in file size. read_symbol on a 1.8 MB .d.ts went from
    9.7s to 0.2s.
  • Ambiguity candidates are ordered by source position rather than
    lexicographically, so @line:column selectors no longer sort 4562 before
    544.
  • GitHub Release notes are now composed from the matching CHANGELOG.md
    section plus install instructions, instead of the commit-derived
    --generate-notes output.

Install

curl -fsSL https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.sh | sh
irm https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.ps1 | iex

Then connect the server to your client — the installer prints the exact command.
See the README for requirements and troubleshooting.

Full Changelog: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 22 Jul 14:35

Changed

  • The installers no longer install the agent skill automatically. Previously
    install.sh and install.ps1 ran install-skills all, creating
    ~/.codex/skills/symbolpeek and ~/.claude/skills/symbolpeek even for
    clients that were not installed. Installation now touches only its own
    directory and prints the optional symbolpeek install-skills codex|claude|all
    step, so you configure just the client you use.

Documentation

  • Rewrote the README around installation, a language support matrix, real
    measured output, troubleshooting, and uninstall instructions.
  • Restructured MCP_TOOLS.md: contents, shared conventions (paths, pagination,
    compact rows, errors), per-tool language markers, and a response example for
    every tool.
  • Added LICENSE (MIT), CHANGELOG.md, SECURITY.md, and issue templates.

Fixed

  • The bundled agent skill referenced a non-existent get_type_info tool; it now
    names get_type and states which operations each language supports.
  • Release archives now include LICENSE.

Install

curl -fsSL https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.sh | sh
irm https://raw.githubusercontent.com/pioner92/symbolpeek-mcp/main/scripts/install.ps1 | iex

Then connect the server to your client — the installer prints the exact command.
See the README for requirements and troubleshooting.

Full Changelog: v0.3.1...v0.4.0

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 22 Jul 13:32

Added

  • One-line installers for macOS, Linux, and Windows that verify the release
    checksum and print ready-to-run client registration commands.
  • symbolpeek install-skills [codex|claude|all] installs the bundled agent
    guidance; the installers run it automatically.

Full Changelog: v0.3.0...v0.3.1

v0.3.0

Choose a tag to compare

@pioner92 pioner92 released this 22 Jul 13:18

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@pioner92 pioner92 released this 22 Jul 11:23

Highlights

SymbolPeek v0.2.0 expands symbol-level code intelligence beyond TypeScript and JavaScript with fast, syntax-aware support for:

  • Rust
  • Python
  • Java
  • Go

These languages use embedded Tree-sitter parsers and require no Node.js runtime.

New language capabilities

Rust, Python, Java, and Go now support:

  • read_symbol
  • list_symbols
  • search_symbols
  • get_document_outline
  • find_dependencies for same-file dependencies
  • read_symbol_context

Rust additionally supports syntax-based find_implementations for explicit impl blocks.

Performance and architecture

  • Added a shared workspace walk for Tree-sitter providers.
  • Removed redundant per-language filesystem scans.
  • Added safe text prefiltering before AST parsing.
  • Node.js now starts only when TS/JS files are present.
  • Preserved full tsconfig-aware discovery for TypeScript and JavaScript.
  • Added an extensible FileDiscovery contract for future language providers.
  • Added a reusable latency benchmark covering cold and warm request batches.

Tree-sitter searches complete in a few milliseconds in the included benchmark, while warm TypeScript requests reuse the long-lived worker.

Compact LLM responses

  • Added trust metadata to language results:
    • backend
    • analysis_level
    • complete
  • Added get_capabilities for compact language and operation discovery.
  • Reduced tool descriptions while preserving response contracts.
  • Continued using interned file tables and tuple rows to minimize repeated keys and token usage.

Reliability

  • Added extensive edge-case coverage for Rust, Python, Java, and Go.
  • Covered malformed syntax recovery, shadowing, overload ambiguity, decorators, annotations, receivers, grouped declarations, nested outlines, pagination, ignored directories, and external references.
  • 114 automated tests passing.
  • Strict Clippy checks passing with all targets and features.
  • Release MCP smoke test passing.

Notes for adapter authors

The public LanguageAdapter workspace-search contract now distinguishes between:

  • Delegated discovery for providers with project-aware configuration, such as TypeScript.
  • SharedWalk discovery for Tree-sitter providers.

Custom language adapters may need to implement the updated discovery contract.

Full changelog: v0.1.2...v0.2.0

v0.1.2

Choose a tag to compare

@pioner92 pioner92 released this 21 Jul 11:56

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@pioner92 pioner92 released this 20 Jul 17:44

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@pioner92 pioner92 released this 20 Jul 07:22
docs: make README reflect real agent benefit and current behavior