Skip to main content
Glama

Octocode: agentic research platform

MCP Community Server Ask DeepWiki Glama score

Website YouTube

Evidence-first code research for AI agents and developers.

Octocode researches your local code and external code alike (GitHub repositories, PRs, npm) with one toolset: ripgrep + AST search, trees, precise reads, and LSP. Use it as a CLI or MCP server, backed by a Rust engine for fast, token-efficient results across single files or mega-repos.


Table of contents


Related MCP server: MCP Indexer

Quick start

Prerequisites: Node.js 20.12+

1. Run the Octocode CLI with npx

npx octocode --help

2. Authenticate with GitHub - optional, but unlocks private repositories and higher API rate limits:

npx octocode auth login
npx octocode status       # verify the active token source

3. Choose your interface. Same tools and Rust engine on both. (Clone is on by default in the CLI, opt-in for MCP.)

🖥️ CLI - research straight from your terminal:

npx octocode

🤖 MCP - one-click install:

Claude Code:

claude mcp add-json octocode --scope user '{"command":"npx","type":"stdio","args":["octocode-mcp@latest"]}'

Any other client: npx octocode install


Use it as an MCP server

Add to your MCP client config (or use a one-click install above):

{
  "octocode": {
    "command": "npx",
    "type": "stdio",
    "args": ["octocode-mcp@latest"]
  }
}

Put a GitHub token and options under env (see Configuration).

Use it as an agentic-friendly CLI

Run npx octocode and agents figure out the rest. The bare command prints built-in usage and the full tool catalog, so any coding agent knows how to drive it out of the box, no MCP client or extra wiring required.

npx octocode                                         # self-describing usage for agents
npx octocode tools                                   # list every tool
npx octocode tools localSearchCode --scheme          # inspect a tool's schema

Every MCP tool is also a plain command: JSON in, token-efficient YAML out. Local paths route to local tools; owner/repo[/path] routes to GitHub.

npx octocode tools localSearchCode \
  --queries '{"path":".","searchText":"authenticate","maxFiles":20}'
results:
  - id: localSearchCode-1
    data:
      files:
        - path: src/auth.ts
          matches:
            - line: 12
              value: "export async function authenticate(req: Request) {"

Learn more at octocode.ai.


Why Octocode

Agents code better from evidence than from guesses. Octocode researches two worlds with one flow, your local code and external code on GitHub and npm, and hands back compact, citable context before an agent changes, reviews, or explains code. Code is truth; context is the map.

Most tools do one slice (web search, or grep your repository) and hand back a fixed blob. Octocode covers the whole loop and lets the agent decide what data it needs next:

  • Agent-driven, efficient flows. Instead of one-shot dumps, Octocode chains cheap steps into an optimized research flow: broad code search, then fetch only the exact matched lines/region, with smart pagination and out-of-the-box minification so the model never over-fetches. Every result carries next-step hints to the cheapest follow-up.

  • Scales to monorepos. Spot a pattern in one repository, follow the PR that introduced it, then trace it across other repositories and your own files, without leaving the chat. Clone any repository and study it locally.

  • Smart GitHub flow. Parallel bulk queries across code, PRs, commits, issues, and repositories, all with the same search-broad, read-narrow, trace-semantically discipline.

  • Works without GitHub. Clone any repository and point the local tools (search, AST, LSP, content) at it, same evidence-first flow.

  • Reads shape, not noise. On-the-fly minify/skeletonize across 70+ languages: a 100 KB file in a few hundred tokens, not walls of boilerplate.

  • Fast, self-contained. Search, parsing, navigation, and redaction run in one prebuilt Rust engine: quick on a laptop or a mega-repo, nothing extra to install.

  • Safe by default. Every byte to the model is scanned and secrets redacted first (see Security).

What you can do (whenever the next step needs proven context, not a guess):

Need

Use Octocode to

Codebase questions

Search local or GitHub code, read exact regions, browse trees, and carry file/line anchors into the answer.

Implementation research

Compare patterns across repositories, npm packages, pull requests, commits, and local files before changing code.

Semantic navigation

Resolve definitions, references, callers/callees, call hierarchy, hovers, symbols, diagnostics, and type relationships through LSP.

Structural matching

Run AST-shaped searches with patterns or YAML rules so comments and strings do not become false positives.

Large-file context

Minify, skeletonize, or paginate code so agents spend tokens on relevant structure instead of boilerplate.

Agent workflows

Same engine through MCP, CLI, and Agent Skills.


Built for research (benchmarks)

A blind, head-to-head test on research-oriented flows rather than plain lookups (multi-hop traces, dependency/call-graph chains, commit ranges, blast-radius, PR reviews across repositories).

Octocode benchmark — same answers, a fraction of the context

How it works: 30 GitHub questions × 3 passes; Octocode vs gh, gh+Headroom, and gh+RTK on identical questions (only the CLI differs). A blind judge (gpt-5.5) grades correctness; the metric is characters through the model, counted from instrumented logs (characters, not tokens). Result: at near-parity correctness, Octocode answers with ~2.0× fewer characters than plain gh, ~2.6× fewer than gh+Headroom, and ~3.2× fewer than gh+RTK in the local-build headline runs.

Open the interactive report · run it / method · questions · all reports


Tools

17 tools in the full catalog. How many register depends on the surface and the flags you set:

Surface

Registers

What that set is

MCP, no flags

8

GitHub search and read, plus npmSearch

MCP, ENABLE_LOCAL=true

14

Adds the five local tools and lspGetSemantics

MCP, + ENABLE_CLONE=true

15

Adds ghCloneRepo

MCP, + ENABLE_TOOLS allowlist

17

Adds ghListReleases and ghSearchDiscussions

CLI, no flags

15

Local tools and clone are on by default

CLI, + ENABLE_RELEASES=1 ENABLE_DISCUSSIONS=1

17

Adds the same two GitHub tools

ghListReleases and ghSearchDiscussions need two settings on MCP, not one: ENABLE_RELEASES=1 or ENABLE_DISCUSSIONS=1 puts the tool in the catalog, and ENABLE_TOOLS="ghListReleases,ghSearchDiscussions" registers it. Either setting alone leaves the tool unregistered, because both carry isDefault: false and the MCP registration filter admits only default or explicitly allowlisted tools. The CLI needs only the ENABLE_RELEASES and ENABLE_DISCUSSIONS flags. ENABLE_LOCAL and ENABLE_CLONE accept true or 1; ENABLE_RELEASES and ENABLE_DISCUSSIONS also accept yes and on. Flags: Configuration.

Token knobs. concise:true returns path/title-only lists. minify controls file read density: symbols = skeleton with line numbers, standard = comments/blanks stripped (default), none = exact bytes.

GitHub tools

Tool

What it does

Knob

ghSearchCode

Code and path search across GitHub by owner, repository, path, filename, extension, and match filters. Accepts 1 to 5 parallel queries.

concise

ghGetFileContent

Read a GitHub file or region: full file, line range, match slice, or paginated chars.

minify

ghViewRepoStructure

Browse a repository's directory tree, plus opt-in repository enrichments.

include

ghSearchRepos

Discover repositories by keywords, owner, topic, language, stars, updated, license, visibility.

concise

ghSearchPullRequests

Search pull requests, or deep-read one PR: files, patches, comments, reviews, commits.

content

ghSearchIssues

Search issues, or read one issue's body and comments.

content

ghSearchCommits

Walk a repository's commit history, or compare two refs (base+head).

includeDiff

ghListReleases

List releases and the latest stable release, with opt-in assets. Opt-in (see Tools for the flags).

includeAssets

ghSearchDiscussions

Search a repository's Discussions (Q&A, RFCs, announcements) through GraphQL. Opt-in (see Tools for the flags).

keywordsToSearch

ghCloneRepo

Clone a repository or sparse subtree into the local cache for local and LSP analysis. Opt-in on MCP (ENABLE_CLONE=true); on by default in the CLI.

sparsePath

Local tools

Tool

What it does

Knob

localSearchCode

Local code/text search returning file and line anchors. mode:"structural" runs Octocode AST shape queries (pattern or rule).

mode

localViewStructure

Browse a local directory tree: depth, filters, pagination, metadata.

detail

localFindFiles

Find local files and directories by name, path, regex, extension, size, time, permissions, type.

localFindDeadCode

Find likely-unreferenced exports and dead-code clusters using whole-repository reachability analysis.

entrypoints

localGetFileContent

Read a local file or region: exact slice, match string, line range, or paginated chars.

minify

Tool

What it does

Knob

npmSearch

npm package lookup and keyword search; returns metadata and the source repository for GitHub handoff.

concise

LSP

Tool

What it does

lspGetSemantics

Typed semantic navigation: definition, references, callers, callees, callHierarchy, hover, documentSymbols, typeDefinition, implementation, workspaceSymbol, supertypes, subtypes, and diagnostic. From the CLI, invoke it directly: npx octocode tools lspGetSemantics --queries '<json>'. Navigation runs through installed language servers (see the LSP tools reference).

Full schemas, fields, and examples for every tool live in docs/OCTOCODE_TOOLS.md (linked under Documentation).


MCP

The MCP server exposes the Octocode tool catalog directly to your AI assistant over stdio.

https://github.com/user-attachments/assets/de8d14c0-2ead-46ed-895e-09144c9b5071

Manual configuration

Add to your MCP client config, using octocode-mcp:

{
  "octocode": {
    "command": "npx",
    "type": "stdio",
    "args": [
      "octocode-mcp@latest"
    ]
  }
}

Add a GitHub token and options under env - see Authentication and Configuration.


CLI

Same research engine, no MCP client needed. Local paths route to local tools; owner/repo[/path] routes to GitHub. Authenticate once with npx octocode auth login (see Authentication); run npx octocode --help for full usage.

Commands

Tool commands

Command

What it does

npx octocode tools <name> --scheme

Show one tool's schema: fields, types, bounds, defaults

npx octocode tools <name> --queries '<json>'

Run a tool (same tools as MCP), YAML output

npx octocode tools <name> --queries '<json>' --json

Run a tool, full CallToolResult JSON

npx octocode tools

List every available tool

More commands

  • Cache and clonenpx octocode clone, npx octocode cache fetch|status|clear

  • Skillsnpx octocode skill list|install|check|info|remove for bundled Octocode skills

  • Language serversnpx octocode lsp-server list|install|status|uninstall|clean

  • Setup and introspectionnpx octocode install, npx octocode auth, npx octocode status, npx octocode context

Full syntax, flags, and exit codes: Octocode CLI guide


Configuration

Everything is optional; Octocode runs on sensible defaults. Settings resolve from three sources, in priority order:

environment variables  >  <octocode-home>/.octocoderc  >  built-in defaults
  1. MCP / environment variables (highest): per client or per project, set in your MCP config env or your shell.

  2. Global config: <octocode-home>/.octocoderc, machine-wide defaults read by both the CLI and the MCP server.

  3. Built-in defaults: used when neither is set.

Octocode home (<octocode-home>) holds the global config, encrypted credentials, sessions, stats, and tmp materialization caches. On every platform it is .octocode inside the OS home directory — ~/.octocode on macOS and Linux, %USERPROFILE%\.octocode on Windows. Override it with OCTOCODE_HOME.

Set values as MCP env entries (per client; these win over .octocoderc) or globally in <octocode-home>/.octocoderc (JSON with comments). Tokens never go in .octocoderc — use env or npx octocode auth login.

Common settings

Most-used settings (both CLI and MCP unless noted):

Env var

.octocoderc key

Default

What it does

OCTOCODE_TOKEN / GH_TOKEN / GITHUB_TOKEN

env only

unset

GitHub token, in priority order. Never in .octocoderc.

ENABLE_LOCAL

local.enabled

CLI true; on MCP set it explicitly

Local filesystem and LSP tools on or off.

ENABLE_CLONE

local.enableClone

CLI true, MCP false

ghCloneRepo + directory fetch on/off.

WORKSPACE_ROOT

local.workspaceRoot

cwd

Root for resolving relative local paths.

ALLOWED_PATHS

local.allowedPaths

[]

Extra path allowlist for local access.

OCTOCODE_OUTPUT_FORMAT

output.format

yaml

Response format: yaml or json.

OCTOCODE_HOME, GitHub Enterprise (GITHUB_API_URL), MCP tool allowlisting (TOOLS_TO_RUN/ENABLE_TOOLS/DISABLE_TOOLS), and network timeouts/retries: see the Configuration Reference.

Example configuration

~/.octocode/.octocoderc:

{
  "github": {
    "apiUrl": "https://api.github.com"
  },
  "local": {
    "enabled": true,
    "enableClone": true
  },
  "output": {
    "format": "yaml"
  }
}

Per-project overrides and custom LSP servers live in a workspace .octocode/ folder. For the full .octocoderc schema, a ready-to-copy example, clone-cache tuning, GitHub Enterprise setup, and precedence details, see the Configuration Reference.


Authentication methods

GitHub-backed tools require authentication. Any one method is enough. Full details: Authentication Setup.

npx octocode auth login
npx octocode status       # verify the active token source

Interactive login lets you choose Octocode browser OAuth or gh auth login. Octocode OAuth credentials are stored encrypted on disk.

Option 2: GitHub CLI (also supported)

gh auth login

Octocode reads the gh token automatically — no further config needed.

Option 3: Personal access token (also supported)

Set OCTOCODE_TOKEN, GH_TOKEN, or GITHUB_TOKEN in your shell. Required scopes: repo, read:user, read:org.

Create a token at github.com/settings/tokens.

Note: Never commit tokens to version control. Use environment variables or secure secret management.


Security

Every byte to the model is scanned and redacted first. All content passes through the Rust engine's secret scanner on the way in and out, so secrets never reach the model. That covers local files, GitHub and npm responses, errors, and tool output. The behavior is identical under MCP and the CLI.

  • Secret redaction, in and out. 300+ provider credential patterns (AWS, Azure, GCP, GitHub, OpenAI, Anthropic, Stripe, Slack, 1Password, and more) plus generic JWTs, PEM/private keys, bearer tokens, database connection strings, and high-entropy strings. Masked values surface a redaction warning so the agent knows.

  • Content sanitized at the source. Local reads (localGetFileContent, ripgrep, structural search, binary, file discovery, structure) and external fetches (GitHub code/files, npm) are scanned as they are read, not only at the boundary.

  • Path safety. Relative inputs resolve from WORKSPACE_ROOT / config / cwd, then local reads are bounded to the engine's allowed roots (home by default, plus ALLOWED_PATHS and Octocode-registered roots). Symlinks are resolved and the real target is re-validated, so a link cannot escape into a blocked location.

  • Sensitive files blocked by default. Reads of known secret-bearing files and folders return a redacted error instead of contents: keys/certs, .env*, .npmrc/.netrc, cloud/infra credentials (.aws/, .kube/, *.tfstate), .git/, browser logins, OS keychains, and wallets. Full list in SECURITY.md.

  • Command safety. Normal local search runs in-process inside octocode-engine. External helpers are fixed per lane, command/argument allowlisted, and run through spawn with argument arrays: no shell strings, no injection.

  • Schema validation runs before any tool executes; untrusted input size and shape are bounded.

  • Credentials. GitHub auth through env tokens, AES-256-GCM-encrypted on-disk OAuth, or the gh CLI; tokens are never logged.

Full security model, pipeline, and threat coverage: SECURITY.md. Related: Configuration and authentication · Credentials


Language support

Four code-intelligence axes; three are native to the Rust engine and need no external tooling:

Axis

What it does

How to use it

Structural AST

Tree-sitter shape queries (pattern or YAML rule) across 60+ extensions.

localSearchCode mode:"structural" · CLI tools localSearchCode --scheme

Signature outline

Body-free skeleton with line numbers from real tree-sitter parsing, no heuristics. An anti-growth guard returns the real file when a skeleton is not smaller.

minify:"symbols" · CLI tools localGetFileContent --scheme

Content minification

Comment/whitespace stripping for 70+ languages and config formats; HTML/Vue/Svelte also minify embedded <style>/<script>.

minify:"standard" (default)

LSP navigation

definition, references, callers/callees, callHierarchy, hover, typeDefinition, implementation, documentSymbols, through an installed language server; JS/TS also have a native, no-server path.

lspGetSemantics · CLI tools lspGetSemantics --scheme

📋 Full support matrix: every extension with its exact AST, signature, LSP, and minify capability lives in the Full format support matrix.


Skills

Agent Skills are a lightweight, open format for extending AI agent capabilities. Browse and install on skills.sh/bgauryy/octocode-mcp

13 skills under skills/, bundled in the octocode package. Each is a lean SKILL.md that loads references only when needed, so they compose. Start with ⭐ Research for evidence-first code work.

npx octocode skill list
npx octocode skill install octocode-research --platform pi
npx octocode skill check --json
npx octocode skill help

Core research and extraction

Skill

Use when

octocode-research

Evidence-first research, review, debugging, refactors, prior-art validation.

octocode-scraping

Public page extraction and crawl triage: static corpus + graph v2 (pages/data/actions/risks/evidence), then CDP handoff for dynamic actions and blocked pages.

octocode-chrome-devtools

Browser/CDP evidence: network, console, performance, cookies/storage, screenshots, auth-gated pages, and live validation of scrape-graph actions.

Planning and architecture

Skill

Use when

octocode-brainstorming

Disciplined idea exploration before building: options, worth-building tests, prior-art maps.

octocode-rfc-generator

Evidence-backed RFCs, design docs, migration plans, option comparisons.

octocode-documentation

Writing or updating README, API docs, runbooks, AGENTS.md, ADRs.

Evaluation and review

Skill

Use when

octocode-roast

Blunt, evidence-backed code critique with severity ranking and repair paths.

octocode-graph-eval

Measuring whether a change helped: goal→KPI contracts, baselines, accept/revert loops, eval suites.

octocode-prompt-optimizer

Making prompts, tool schemas, and agent contracts clearer, safer, cheaper, measurable.

Agent orchestration

Skill

Use when

octocode-subagent

Spawning workers / Task / A2A / challenge techniques, or offloading token-heavy text to local Ollama under a verify gate.

octocode-skills

Agent-skill lifecycle: discover, review, create, improve, install, sync.

Web automation workflow: octocode-scraping performs the safe static pass first (fetch/crawl/extract → local corpus → graph v2). When the graph exposes dynamic actions or static output is blocked/thin, octocode-chrome-devtools validates live actionability, cookies/storage, network/HAR bodies, screenshots, or auth-gated state; discovered URLs/data/artifacts can be fed back into the scraping corpus for continued proof.


Architecture

A yarn-workspaces monorepo. The MCP server and the CLI are thin front-ends over one shared TypeScript tool core, which delegates every CPU-heavy path to a single Rust engine (compiled through napi-rs to prebuilt .node binaries). One tool catalog, one security layer, one response shaper, reached two ways.

graph LR
    CLI["octocode<br/>CLI"]
    MCP["octocode-mcp<br/>MCP server, stdio"]
    VSC["VS Code extension<br/>OAuth + install"]
    CORE["octocode-tools-core<br/>tools, GitHub client, auth, pagination, security bridge"]
    ENGINE["octocode-engine (Rust)<br/>secrets, minify, AST, signatures, ripgrep/diff/YAML, LSP"]
    EXT["GitHub API, local FS + ripgrep, language servers"]

    CLI --> CORE
    MCP --> CORE
    VSC -. starts .-> MCP
    CORE --> ENGINE
    CORE --> EXT
    ENGINE --> EXT

    style ENGINE fill:#1a1a2e,stroke:#e75d2a,color:#fff

Request flow is identical whether a call arrives over MCP or the CLI:

client → sanitize inputs (Rust) → run tool (GitHub / FS / LSP) → sanitize + YAML-serialize + paginate (Rust) → result + next-step hints

One Rust engine owns secret detection, sanitization, path and command validation, minification (70+ languages), signature extraction, structural AST search, ripgrep parsing, diff filtering, YAML serialization, and LSP. The Node event loop therefore stays unblocked, and there is no duplicate native loader. The engine ships prebuilt for darwin (arm64/x64), linux (arm64/x64, gnu and musl), and win32-x64; no Rust toolchain is needed at runtime.

Packages

Directory

npm package

Role

packages/octocode

octocode

CLI: quick commands, raw tool runner, skill installs, auth/login/logout, install, status, context.

packages/octocode-mcp

octocode-mcp

MCP server (stdio) that registers the tool catalog for AI assistants.

packages/octocode-tools-core

@octocodeai/octocode-tools-core

Shared tool core: implementations, GitHub client, credentials and token resolution, session, pagination, security bridge.

packages/octocode-engine

@octocodeai/octocode-engine

Rust/napi native engine: security scanning, minification, signatures, structural AST, ripgrep/diff/YAML, LSP.

packages/octocode-config

@octocodeai/config

Zero-dep env + config loader: getOctocodeHome, .env parsing, .octocoderc reading. Single source used by every package and skill.

packages/octocode-vscode

octocode-mcp-vscode

VS Code extension: GitHub OAuth + multi-editor MCP install.

packages/octocode-benchmark (private, not published) holds benchmark methodology, evals, and run artifacts - see Documentation.


Documentation

Website: octocode.ai · Product docs: github.com/bgauryy/octocode/tree/main/docs. This section is the canonical documentation index; benchmark methodology, evals, and run artifacts live in packages/octocode-benchmark.


Troubleshooting

Node.js or environment issues? Run the built-in doctor command to check your environment:

npx node-doctor

Common pitfalls:

  • GitHub auth failures: Ensure your Personal Access Token (PAT) has the repo and read:user scopes. If using the CLI, run npx octocode auth login to refresh.

  • MCP connection issues: If your AI assistant (like Cursor or Windsurf) fails to connect, ensure you have run npx octocode auth login in your terminal first, or explicitly pass your OCTOCODE_TOKEN in the MCP env configuration.

  • Native engine errors: Octocode uses a prebuilt Rust engine. If it fails to load on Linux, ensure your system has glibc or musl compatibility. On macOS/Windows, ensure you are on a supported architecture (x64 or arm64).


Agent workflows

Pi is a fast, local-first coding agent whose stated philosophy is "CLI tools with READMEs (Skills) over MCP." Pairing it with Octocode gives a lean, evidence-driven dev loop — Pi edits, Octocode researches. Two routes, pick by how much surface you need:

  • Skill route — recommended, leanest. Drop the octocode-research skill into Pi's global skills dir. It drives the Octocode CLI directly — no MCP transport, minimal token overhead — and Pi auto-discovers it:

    npx octocode skill install octocode-research --platform pi
  • Adapter route — full tool surface. Install pi-mcp-adapter to expose Octocode MCP tools behind a single ~200-token proxy tool, so servers stay disconnected until a tool is called. Enable clone tools with ENABLE_CLONE=true.

Research-driven loop

Most agent failures happen before the edit: guessing who owns a behavior, trusting a snippet without reading the source, editing before proving blast radius. Run a cheaper loop instead: orient with trees, search, read exact evidence, use AST/LSP when identity matters, then patch and verify. The host edits, Octocode is the map, and skills encode the habit.

The Manifest

"Code is Truth, but Context is the Map." Read the Manifest of Octocode for Research Driven Development to understand the philosophy behind Octocode.

Available Tools

13 tools
githubGetFileContentA
Idempotent

Read GitHub file or download directory [EXTERNAL: GitHub API]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesResearch queries for githubGetFileContent (1-3 queries per call for optimal resource management). Review schema before use for optimal results
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral details beyond annotations: file returns content inline, directory saves to disk and returns localPath. It discloses limits (300KB max, branch naming), input constraints (mutually exclusive params), and mode-specific behaviors. No contradiction with annotations (idempotentHint=true, destructiveHint=false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description uses a well-organized structure with headings (<when>, <fromTool>, etc.) that front-load the main purpose and allow quick scanning. While lengthy due to necessary detail (gotchas, examples), every section adds value and the conciseness is appropriate for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all aspects for effective use: when to use, how to use (modes, params), pitfalls (gotchas), examples, and integration with siblings. It mentions prerequisites for directory mode (ENABLE_LOCAL, ENABLE_CLONE) and the file size limit. The output schema exists separately, so return values are omitted by design.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% description coverage, but the description adds value by explaining the three mutually exclusive file modes (matchString, startLine+endLine, fullContent) and the pagination parameters (charOffset, charLength) in the <gotchas> and <modes> sections, enhancing practical usage understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a GitHub file or downloads a directory, with specific verbs ('read', 'download') and resource ('GitHub file or directory'). It distinguishes from siblings like githubSearchCode (search) and githubViewRepoStructure (structure), and the title 'GitHub File Content Fetch' reinforces the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The <when> section provides clear contexts (e.g., read from known path, download directory). The <fromTool> and <toTool> sections guide use in conjunction with other tools. However, it lacks explicit 'when not to use' guidance, though the modes and gotchas imply exclusions (e.g., directory mode requires specific flags).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

githubSearchCodeA
Read-onlyIdempotent

Search GitHub code [EXTERNAL: GitHub API]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesResearch queries for githubSearchCode (1-3 queries per call for optimal resource management). Review schema before use for optimal results
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds substantial behavioral detail beyond annotations, including strict prefix matching for 'path', pagination parameters, match type behavior, and filtering constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with clear sections (<when>, <fromTool>, <toTool>, <gotchas>, <examples>). It is front-loaded with essential usage context, though some redundancy exists (e.g., repeating 'match' behavior in multiple places).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity with nested queries and multiple parameters, the description is remarkably complete. It covers when to use, how to chain with other tools, gotchas, and examples. The presence of an output schema reduces the need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers all parameters with descriptions, and schema coverage is 100%. The description enriches parameter understanding with contextual advice like 'Start lean: single filter -> verify -> add filters' and explicit examples, adding meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool searches GitHub code, with explicit directives to 'Find code patterns' and 'Locate files by path'. It distinguishes between match=file and match=path, and mentions cross-repo usage. Sibling tools like githubSearchRepositories and githubGetFileContent are differentiated through usage guidance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The <when> section defines appropriate contexts, and <fromTool> and <toTool> sections provide explicit sequencing with sibling tools. The <gotchas> section offers critical do's and don'ts, such as avoiding combining extension+filename+path and preferring owner+repo for precision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

githubSearchPullRequestsA
Read-onlyIdempotent

Search GitHub Pull Requests [EXTERNAL: GitHub API]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesResearch queries for githubSearchPullRequests (1-3 queries per call for optimal resource management). Review schema before use for optimal results
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds critical behavioral details in the <gotchas> section, such as 'prNumber ignores ALL other filters' and 'Avoid fullContent on large PRs (token expensive)', which go beyond annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (<when>, <fromTool>, <toTool>, <gotchas>, <examples>) and is front-loaded with the title and external API note. While comprehensive, it is relatively long, but each section earns its place given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (many parameters, nested query objects, relationships to siblings) and the presence of an output schema (not shown), the description covers usage patterns, gotchas, and integration with other tools comprehensively. It provides enough context for an agent to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for each parameter, so baseline is 3. The description adds value through concrete examples showing parameter combinations and the gotcha about prNumber. However, the description does not elaborate on parameter semantics beyond what the schema already provides, so it does not fully compensate for the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search GitHub Pull Requests'. The <when> section provides specific use cases like code archaeology and implementation history, and the fromTool/toTool sections differentiate it from sibling tools by showing how they relate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The <when> section explicitly outlines when to use this tool (code archaeology, implementation history) and suggests a workflow (metadata first, then partialContent). The fromTool and toTool sections provide clear guidance on alternatives and sequencing, e.g., using githubSearchCode first, then this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

githubSearchRepositoriesA
Read-onlyIdempotent

Search GitHub repositories [EXTERNAL: GitHub API]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesResearch queries for githubSearchRepositories (1-3 queries per call for optimal resource management). Review schema before use for optimal results
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds valuable behavioral context: gotchas like pushedAt vs updatedAt distinction, stars filter noise, archived auto-exclusion, and synonym suggestions. Adds significant value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but well-structured with clear sections (<when>, <fromTool>, <toTool>, <gotchas>, <examples>). Every section adds value and the front-loading of purpose is good. Slightly verbose but acceptable given complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (multiple query parameters, pagination, interaction with other tools), the description is complete. It covers usage context, tool flow, gotchas, and examples. Output schema exists, so return values are not needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions (e.g., stars filter format, match enum). The description itself doesn't add much beyond schema for individual parameters but provides examples that illustrate usage. Baseline 3 is appropriate as schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search GitHub repositories' and distinguishes from sibling tools like packageSearch (faster for known packages) and githubSearchCode (code search). The purpose is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit <when> usage context (external research, finding repos) and <fromTool>/<toTool> sections that guide the flow between tools. It also names alternatives like packageSearch for known packages, providing clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

githubViewRepoStructureA
Read-onlyIdempotent

Display GitHub repo structure [EXTERNAL: GitHub API]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesResearch queries for githubViewRepoStructure (1-3 queries per call for optimal resource management). Review schema before use for optimal results
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds crucial behavioral details in '<gotchas>': depth=2 slowdown, auto-filtering of noisy dirs (e.g., .git, node_modules), maximum 200 items, and the need to check summary.truncated. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (<when>, <fromTool>, <toTool>, <gotchas>, <examples>) that are front-loaded and efficient. Every sentence provides actionable information with no redundancy, making it easy for an agent to parse and apply.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity, output schema existence, and full schema coverage, the description covers all necessary aspects: use cases, workflow, gotchas, examples, and tool interactions. It leaves no critical gaps for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value through examples (e.g., path='', depth=1; path='src', depth=2) and gotchas that clarify parameter usage (starting from root, depth constraints). While not exhaustive, it enhances understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Display GitHub repo structure' and positions it as an entry point for understanding layout and discovering paths. It explicitly distinguishes from sibling tools like githubSearchCode and githubGetFileContent via the 'toTool' section, ensuring no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit <when> section describing use cases (Understand layout, Discover paths, Entry point) and a workflow (Root depth=1, then Drill path+depth=2). Also includes 'fromTool' and 'toTool' sections that guide the agent on tool chaining, offering clear when-to-use and when-to-alternate guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

localFindFilesA
Read-onlyIdempotent

Find files by metadata [LOCAL: filesystem]

Config/docs: localGetFileContent directly

  • Faster than content search (metadata indexing)

  • excludeDir for noise (node_modules, dist, .git)

  • Time: '7d', '2h', '30m'

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesQueries for localFindFiles (1–5 per call). Review schema before use.
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds valuable behavioral context: performance note ('Faster than content search due to metadata indexing'), default exclusion directories, time format examples, and pagination details (filesPerPage, charOffset). No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (when, fromTool, toTool, gotchas, examples) and front-loads the core purpose. However, it is relatively verbose; could be more concise by removing redundant phrases. Still easily scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (many parameters and pagination), the description provides comprehensive context: usage workflow, examples, performance characteristics, and exclusion defaults. An output schema exists, so return value explanation is not needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with individual parameter descriptions. The description enhances understanding via examples (e.g., time formats '7d', '2h') and gotchas (e.g., excludeDir defaults), but does not add new meaning for each parameter beyond what schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds files by metadata (name, time, size, permissions) on the local filesystem. It explicitly distinguishes from sibling tools: 'NOT for content - use localSearchCode' and fromTool section links to localViewStructure, making differentiation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The <when> section provides explicit guidance on when to use (metadata search, scope narrowing, recent changes) and when not to (content search, directing to localSearchCode). The <fromTool> and <toTool> sections further specify workflow ordering with other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

localGetFileContentA
Read-onlyIdempotent

Read file content [LOCAL: filesystem]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesQueries for localGetFileContent (1–5 per call). Review schema before use.
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds significant behavioral context beyond annotations, such as the ability to read specific lines, match patterns, pagination via charOffset/charLength, and token efficiency warnings for large files. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (<when>, <gotchas>, <examples>) that are front-loaded. Despite length, every section earns its place by providing essential context, guidelines, or examples. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple parameters, pagination, batch queries) and the presence of annotations and output schema, the description is complete. It covers when to use, how to use, pitfalls, examples, and alternatives, leaving no ambiguity for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value beyond the schema through examples and gotchas that illustrate parameter combinations (e.g., using startLine/endLine for known ranges, fullContent for small configs). It clarifies pagination parameters and the batch nature of queries, which enhances understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read file content [LOCAL: filesystem]' and lists specific use cases in the <when> section, such as reading implementation after locating with search/LSP and reading configs/docs directly. It also distinguishes from sibling tools by stating 'Direct read OK for: configs, docs, .json, .md, .yaml' and providing alternatives like LSP tools for certain tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides extensive usage guidelines through sections like <when>, <fromTool>, <flow_questions>, and <gotchas>. It explicitly tells when to use the tool, when to prefer alternatives (e.g., LSP tools for flow analysis), and best practices (e.g., use matchString for large files, startLine/endLine for known ranges).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

localSearchCodeA
Read-onlyIdempotent

Search code patterns [LOCAL: ripgrep] - START HERE for code questions

Without LSP:

  • localGetFileContent(matchString) for context

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesQueries for localSearchCode (1–5 per call). Review schema before use.
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds gotchas like lineHint being 1-indexed, filesOnly for fast discovery, and type filter efficiency, providing additional behavioral context beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (<when>, <fromTool>, <toTool>, <gotchas>, <examples>), front-loaded with a summary. Each section is concise and serves a distinct purpose without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (many parameters) and the presence of an output schema, the description provides sufficient context with examples, workflows, and gotchas. It covers usage beyond the schema, making it complete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented. The description adds value through examples and gotchas (e.g., filesOnly, type filter), but does not elaborate on each parameter since the schema already does. Baseline 3 is elevated to 4 due to practical usage tips.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches code patterns using ripgrep, listing specific use cases like function finding, symbol lookup, and pattern matching. It distinguishes from sibling tools like localFindFiles and localViewStructure by referencing them in the <fromTool> and <toTool> sections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The <when> and <toTool> sections provide explicit guidance on when to use this tool and how it fits into workflows with LSP or alternative tools (e.g., lspGotoDefinition, lspFindReferences). It also suggests self-refining patterns.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

localViewStructureA
Read-onlyIdempotent

View directory structure [LOCAL: filesystem]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesQueries for localViewStructure (1–5 per call). Review schema before use.
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds valuable behavioral context: auto-excludes (node_modules, .git, dist), performance warnings (depth=2 slow on large dirs), and pagination behavior. This goes beyond annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (<when>, <fromTool>, <toTool>, <gotchas>, <examples>). It is front-loaded with the core action and usage context. While comprehensive, it remains concise and each section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (local filesystem, many parameters, sibling tools) and the existence of an output schema, the description covers all necessary contexts: usage scenarios, workflow guidance, pitfalls, sibling differentiation, and examples. It is fully complete for AI agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description mentions key parameters (path, depth, pattern, filesOnly) in examples and gotchas but does not add significant semantic detail beyond what the schema descriptions provide. Some parameters like 'charOffset' have empty descriptions in schema, but the description does not address them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'View directory structure' and provides explicit examples and usage patterns. It distinguishes itself from siblings by outlining when to use this tool versus localFindFiles, localSearchCode, etc., making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The <when> block explicitly describes when to use the tool, including workflow steps (start depth=1, drill depth=2, then search). It also contrasts with sibling tools in <fromTool> and provides situational advice like monorepo checks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lspCallHierarchyA
Read-onlyIdempotent

Trace function call relationships [LOCAL: LSP]

REQUIRES lineHint - call localSearchCode FIRST to get line number

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesQueries for lspCallHierarchy (1-3 per call). Review schema before use. Expensive operation; prefer depth=1 and follow up from returned calls.
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds useful context: requires lineHint (1-indexed), works cross-file, traces imports automatically, and is semantic. No contradictions. Could mention cost/expense in description itself, but schema covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is lengthy but well-structured with clear sections (when, prerequisite, fromTool, etc.) and front-loaded purpose. Every section adds value, but could be slightly more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the presence of output schema, the description covers all necessary aspects: prerequisites, alternatives, flow patterns, gotchas, and examples. No gaps in understanding how the tool works or how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for each parameter. The description adds examples and usage patterns but does not significantly enhance parameter semantics beyond what the schema already provides, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Trace function call relationships [LOCAL: LSP]' and distinguishes between incoming/outgoing directions. It also includes a dedicated section comparing with sibling lspFindReferences, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use scenarios via <when> tags (e.g., 'Who calls this?' for incoming), prerequisite requirements (lineHint from localSearchCode), and alternatives (lspFindReferences for non-call usages). Also includes flow patterns and examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lspFindReferencesA
Read-onlyIdempotent

Find all usages of a symbol [LOCAL: LSP]

REQUIRES lineHint - call localSearchCode FIRST to get line number

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesQueries for lspFindReferences (1-5 per call). Review schema before use. Batch independent symbols and use page for large result sets.
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already specify readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds useful behavioral details such as the requirement for lineHint, case-sensitivity of symbolName, and that includeDeclaration defaults to true, but does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections, bullet points, and examples. It is somewhat lengthy but each section is informative and front-loaded with the core purpose, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity with multiple parameters and nested queries, the description covers prerequisites, common pitfalls, integration with other tools, and provides examples. An output schema exists, so return values are not required. The description is complete and actionable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for each parameter. The description adds value by highlighting critical constraints like 'lineHint required (1-indexed)' and providing examples, enhancing understanding beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Find all usages of a symbol' and provides examples like 'Where is X used?'. It distinguishes itself from siblings like lspCallHierarchy, which focuses on call relationships.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit <when> section, prerequisites from localSearchCode, <fromTool> and <toTool> dependencies, and a comparison with lspCallHierarchy, providing comprehensive guidance on when to use this tool vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lspGotoDefinitionA
Read-onlyIdempotent

Navigate to symbol definition [LOCAL: LSP]

REQUIRES lineHint - call localSearchCode FIRST to get line number

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesQueries for lspGotoDefinition (1-5 per call). Review schema before use. Batch independent symbol lookups.
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false. The description adds behavioral details: requires lineHint (1-indexed from localSearchCode), symbolName must be exact, tool searches +/-2 lines, batching support (1-5 per call), and pagination parameters. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with markdown sections, front-loaded with purpose. Every section (when, prerequisite, fromTool, toTool, gotchas, examples) provides essential information without redundancy. Concise yet comprehensive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, return values need no explanation. The description covers prerequisites, gotchas, relationships with siblings, and examples. For a tool with complex parameter dependencies and batching, this is complete and self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, so baseline is 3. The description adds value by explaining cross-tool dependencies (lineHint from localSearchCode), exactness of symbolName, and default values for orderHint/contextLines, which helps the agent construct correct parameters beyond schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Navigate to symbol definition' with specific verb and resource. The <when> section delineates exact use cases (find definition, trace import) and the <fromTool>/<toTool> sections distinguish this from siblings like lspFindReferences and lspCallHierarchy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit <when> and <prerequisite> sections state when to use and that lineHint from localSearchCode is required. The <toTool> section lists alternatives (e.g., lspFindReferences for usages) and <gotchas> note when to fall back to external search (packageSearch -> githubGetFileContent).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

packageSearchA
Read-onlyIdempotent

Find NPM/Python packages [EXTERNAL: npm/PyPI]

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesResearch queries for packageSearch (1-3 queries per call for optimal resource management). Review schema before use for optimal results
responseCharOffsetNoCharacter offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.
responseCharLengthNoCharacter budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesArray of results, one per input query, discriminated by status
responsePaginationNoPagination metadata for top-level bulk response pagination across results[]

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds critical behavioral details: searchLimit defaults (1 for known, 5 for alternatives), Python returns only 1 result, naming conventions (dashes vs underscores), and the need to check deprecation warnings. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (titles, when, fromTool, toTool, vsGitHub, gotchas, examples). It is comprehensive without being overly verbose. Slightly more concise could be achieved, but it is appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (multi-parameter array, two ecosystems), the description covers all essential aspects: external APIs, behavior differences, pagination, deprecation, and integration with sibling tools. The schema and output schema handle the rest, leaving no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed property descriptions. The description adds value through <gotchas> (e.g., Python always returns 1, naming conventions) and <examples> (concrete usage of name and ecosystem). This exceeds the baseline but not by a large margin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Title and description clearly state 'Find NPM/Python packages' and specify that it provides repository URLs. The <vsGitHub> section explicitly distinguishes from githubSearchRepositories, making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The <when> section lists clear use cases: lookup by name, get repo URL, compare alternatives, check deprecation. The <fromTool> and <toTool> sections provide chaining guidance, and <vsGitHub> advises using this tool first for known names versus githubSearchRepositories for broad discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 13 tool updatesv9.1.1
    • ChangedgithubGetFileContent26 fields changed
      • removedInput schema / properties / queries / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / queries / items / properties / branch / description
        Added value: +"Branch/tag/SHA (optional, defaults to default branch)"
      • addedInput schema / properties / queries / items / properties / charLength / description
        Added value: +"Max chars per page. Default: 20000"
      • addedInput schema / properties / queries / items / properties / charOffset / description
        Added value: +"Pagination offset. Default: 0"
      • addedInput schema / properties / queries / items / properties / charOffset / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / queries / items / properties / endLine / description
        Added value: +"End line (with startLine). File mode only"
      • addedInput schema / properties / queries / items / properties / endLine / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / queries / items / properties / forceRefresh
        Added value: +{
        +  "default": false,
        +  "description": "When true, bypass the cache and force a fresh fetch even if a valid cached copy exists. Only relevant for type \"directory\".",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / queries / items / properties / fullContent / description
        Added value: +"Return entire file (default: false). File mode only"
      • addedInput schema / properties / queries / items / properties / id
        Added value: +{
        +  "description": "Stable query identifier used to match each result to its input query. Required for every query. Use a short meaningful string like \"react_hooks_search\" or \"router_prs\".",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9._:-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / mainResearchGoal / description
        Added value: +"Main research objective (multiple queries can share the same main goal for semantic grouping and session tracking)"
      • addedInput schema / properties / queries / items / properties / matchString / description
        Added value: +"Search pattern to extract. File mode only"
      • addedInput schema / properties / queries / items / properties / matchString / maxLength
        Added value: +2000
      • addedInput schema / properties / queries / items / properties / matchStringContextLines / description
        Added value: +"Context around matches (1-50). Default: 5"
      • addedInput schema / properties / queries / items / properties / owner / description
        Added value: +"Repo owner"
      • addedInput schema / properties / queries / items / properties / path / description
        Added value: +"File or directory path from root, no leading slash, exact case"
      • addedInput schema / properties / queries / items / properties / reasoning / description
        Added value: +"Why this query helps achieve the goal"
      • addedInput schema / properties / queries / items / properties / repo / description
        Added value: +"Repo name"
      • addedInput schema / properties / queries / items / properties / researchGoal / description
        Added value: +"Specific information this query seeks"
      • addedInput schema / properties / queries / items / properties / startLine / description
        Added value: +"Start line (with endLine). File mode only"
      • addedInput schema / properties / queries / items / properties / startLine / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / queries / items / properties / type
        Added value: +{
        +  "default": "file",
        +  "description": "Choose ONE: \"file\" (default) returns content inline; \"directory\" saves all files to disk and returns localPath. Directory mode requires ENABLE_LOCAL=true and ENABLE_CLONE=true, and is only available with the GitHub provider (not GitLab).",
        +  "enum": [
        +    "file",
        +    "directory"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / queries / items / required
        Previous value: -[
        -  "mainResearchGoal",
        -  "researchGoal",
        -  "reasoning",
        -  "owner",
        -  "repo",
        -  "path"
        -]New value: +[
        +  "id",
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning",
        +  "owner",
        +  "repo",
        +  "path"
        +]
      • addedInput schema / properties / responseCharLength
        Added value: +{
        +  "description": "Character budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / responseCharOffset
        Added value: +{
        +  "description": "Character offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "responsePagination": {
        +      "additionalProperties": false,
        +      "description": "Pagination metadata for top-level bulk response pagination across results[]",
        +      "properties": {
        +        "charLength": {
        +          "description": "Character length of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "charOffset": {
        +          "description": "Character offset of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "currentPage": {
        +          "description": "Current page number (1-indexed)",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        },
        +        "hasMore": {
        +          "description": "Whether more pages are available after the current page",
        +          "type": "boolean"
        +        },
        +        "totalChars": {
        +          "description": "Total number of characters in the full output",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "totalPages": {
        +          "description": "Total number of pages available",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "currentPage",
        +        "totalPages",
        +        "hasMore",
        +        "charOffset",
        +        "charLength",
        +        "totalChars"
        +      ],
        +      "type": "object"
        +    },
        +    "results": {
        +      "description": "Array of results, one per input query, discriminated by status",
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "The tool-specific result data",
        +                "properties": {
        +                  "cached": {
        +                    "description": "Whether a cached fetch was reused",
        +                    "type": "boolean"
        +                  },
        +                  "content": {
        +                    "description": "File content as text for single-file requests",
        +                    "type": "string"
        +                  },
        +                  "endLine": {
        +                    "description": "Ending line number of the returned content",
        +                    "exclusiveMinimum": 0,
        +                    "maximum": 9007199254740991,
        +                    "type": "integer"
        +                  },
        +                  "fileCount": {
        +                    "description": "Number of files fetched in directory mode",
        +                    "maximum": 9007199254740991,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "files": {
        +                    "description": "Files fetched in directory mode",
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "path": {
        +                          "description": "Relative path within the fetched directory",
        +                          "type": "string"
        +                        },
        +                        "size": {
        +                          "description": "File size in bytes",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "type": {
        +                          "const": "file",
        +                          "description": "Directory fetch only returns files",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "path",
        +                        "size",
        +                        "type"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "hints": {
        +                    "description": "Contextual hints and suggestions for next steps or better queries",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "isPartial": {
        +                    "description": "Whether the returned file content is partial",
        +                    "type": "boolean"
        +                  },
        +                  "lastModified": {
        +                    "description": "Last modified timestamp for the file",
        +                    "type": "string"
        +                  },
        +                  "lastModifiedBy": {
        +                    "description": "Author of the last file modification",
        +                    "type": "string"
        +                  },
        +                  "localPath": {
        +                    "description": "Local filesystem path for directory fetch mode",
        +                    "type": "string"
        +                  },
        +                  "pagination": {
        +                    "additionalProperties": false,
        +                    "description": "Pagination metadata for partial file content",
        +                    "properties": {
        +                      "byteLength": {
        +                        "description": "Byte length of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "byteOffset": {
        +                        "description": "Byte offset of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "charLength": {
        +                        "description": "Character length of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "charOffset": {
        +                        "description": "Character offset of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "totalBytes": {
        +                        "description": "Total number of bytes in the full output",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalChars": {
        +                        "description": "Total number of characters in the full output",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "resolvedBranch": {
        +                    "description": "Resolved branch used to fetch the content when it adds new information beyond the input query",
        +                    "type": "string"
        +                  },
        +                  "startLine": {
        +                    "description": "Starting line number of the returned content",
        +                    "exclusiveMinimum": 0,
        +                    "maximum": 9007199254740991,
        +                    "type": "integer"
        +                  },
        +                  "totalSize": {
        +                    "description": "Total fetched size in bytes",
        +                    "maximum": 9007199254740991,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "hasResults",
        +                "description": "Indicates the query returned results successfully",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": {},
        +                "description": "Empty result metadata (may contain hints or paging details)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "empty",
        +                "description": "Indicates the query returned no matching results",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "Error details including message, type, and recovery hints",
        +                "properties": {
        +                  "cwd": {
        +                    "description": "Working directory relevant to the error",
        +                    "type": "string"
        +                  },
        +                  "error": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "error": {
        +                            "description": "GitHub API error message",
        +                            "type": "string"
        +                          },
        +                          "hints": {
        +                            "description": "Provider-specific hints",
        +                            "items": {
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          "rateLimitRemaining": {
        +                            "description": "Remaining API requests in the current rate limit window",
        +                            "type": "number"
        +                          },
        +                          "rateLimitReset": {
        +                            "description": "Rate limit reset time in milliseconds since epoch",
        +                            "type": "number"
        +                          },
        +                          "retryAfter": {
        +                            "description": "Retry-after delay in seconds",
        +                            "type": "number"
        +                          },
        +                          "scopesSuggestion": {
        +                            "description": "Suggested scopes needed to resolve the error",
        +                            "type": "string"
        +                          },
        +                          "status": {
        +                            "description": "HTTP status code",
        +                            "maximum": 9007199254740991,
        +                            "minimum": -9007199254740991,
        +                            "type": "integer"
        +                          },
        +                          "type": {
        +                            "description": "GitHub API error category",
        +                            "enum": [
        +                              "http",
        +                              "graphql",
        +                              "network",
        +                              "unknown"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "error",
        +                          "type"
        +                        ],
        +                        "type": "object"
        +                      }
        +                    ],
        +                    "description": "Error message or API error object"
        +                  },
        +                  "errorCode": {
        +                    "description": "Tool error code",
        +                    "type": "string"
        +                  },
        +                  "errorType": {
        +                    "description": "Tool-specific error type (e.g. symbol_not_found, size_limit)",
        +                    "type": "string"
        +                  },
        +                  "hints": {
        +                    "description": "Recovery hints",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "resolvedPath": {
        +                    "description": "Resolved filesystem path involved in the error",
        +                    "type": "string"
        +                  },
        +                  "searchRadius": {
        +                    "description": "LSP search radius when symbol not found",
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "error"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "error",
        +                "description": "Indicates the query encountered an error",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • ChangedgithubSearchCode20 fields changed
      • removedInput schema / properties / queries / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / queries / items / properties / charLength
        Added value: +{
        +  "description": "Character budget for output pagination after domain pagination has been applied.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / charOffset
        Added value: +{
        +  "description": "Character offset for output pagination after domain pagination has been applied.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / extension / description
        Added value: +"Extension without dot (ts, js, py)"
      • addedInput schema / properties / queries / items / properties / filename / description
        Added value: +"Filename pattern (case-insensitive)"
      • addedInput schema / properties / queries / items / properties / id
        Added value: +{
        +  "description": "Stable query identifier used to match each result to its input query. Required for every query. Use a short meaningful string like \"react_hooks_search\" or \"router_prs\".",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9._:-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / keywordsToSearch / description
        Added value: +"Search terms (1-5, AND logic). match=file returns text_matches[]"
      • addedInput schema / properties / queries / items / properties / limit / description
        Added value: +"Max results (1-100). Default: 10"
      • addedInput schema / properties / queries / items / properties / mainResearchGoal / description
        Added value: +"Main research objective (multiple queries can share the same main goal for semantic grouping and session tracking)"
      • addedInput schema / properties / queries / items / properties / match / description
        Added value: +"\"file\" (content) | \"path\" (names). Omit for both"
      • addedInput schema / properties / queries / items / properties / owner / description
        Added value: +"Repo owner (omit for cross-repo)"
      • addedInput schema / properties / queries / items / properties / page / description
        Added value: +"Page (1-10). Default: 1"
      • addedInput schema / properties / queries / items / properties / path / description
        Added value: +"Directory path (strict prefix match)"
      • addedInput schema / properties / queries / items / properties / reasoning / description
        Added value: +"Why this query helps achieve the goal"
      • addedInput schema / properties / queries / items / properties / repo / description
        Added value: +"Repo name (use with owner)"
      • addedInput schema / properties / queries / items / properties / researchGoal / description
        Added value: +"Specific information this query seeks"
      • changedInput schema / properties / queries / items / required
        Previous value: -[
        -  "mainResearchGoal",
        -  "researchGoal",
        -  "reasoning",
        -  "keywordsToSearch"
        -]New value: +[
        +  "id",
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning",
        +  "keywordsToSearch"
        +]
      • addedInput schema / properties / responseCharLength
        Added value: +{
        +  "description": "Character budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / responseCharOffset
        Added value: +{
        +  "description": "Character offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "responsePagination": {
        +      "additionalProperties": false,
        +      "description": "Pagination metadata for top-level bulk response pagination across results[]",
        +      "properties": {
        +        "charLength": {
        +          "description": "Character length of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "charOffset": {
        +          "description": "Character offset of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "currentPage": {
        +          "description": "Current page number (1-indexed)",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        },
        +        "hasMore": {
        +          "description": "Whether more pages are available after the current page",
        +          "type": "boolean"
        +        },
        +        "totalChars": {
        +          "description": "Total number of characters in the full output",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "totalPages": {
        +          "description": "Total number of pages available",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "currentPage",
        +        "totalPages",
        +        "hasMore",
        +        "charOffset",
        +        "charLength",
        +        "totalChars"
        +      ],
        +      "type": "object"
        +    },
        +    "results": {
        +      "description": "Array of results, one per input query, discriminated by status",
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "The tool-specific result data",
        +                "properties": {
        +                  "files": {
        +                    "description": "Matching files with repository context and snippets",
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "lastModifiedAt": {
        +                          "description": "Last modified timestamp for the file",
        +                          "type": "string"
        +                        },
        +                        "owner": {
        +                          "description": "Repository owner",
        +                          "type": "string"
        +                        },
        +                        "path": {
        +                          "description": "Path of the matching file in the repository",
        +                          "type": "string"
        +                        },
        +                        "repo": {
        +                          "description": "Repository name",
        +                          "type": "string"
        +                        },
        +                        "text_matches": {
        +                          "description": "Matched code snippets when searching file content",
        +                          "items": {
        +                            "anyOf": [
        +                              {
        +                                "type": "string"
        +                              },
        +                              {
        +                                "additionalProperties": false,
        +                                "properties": {
        +                                  "matchIndices": {
        +                                    "description": "Character offset positions of matches within the snippet",
        +                                    "items": {
        +                                      "additionalProperties": false,
        +                                      "properties": {
        +                                        "end": {
        +                                          "description": "End offset of match",
        +                                          "maximum": 9007199254740991,
        +                                          "minimum": 0,
        +                                          "type": "integer"
        +                                        },
        +                                        "start": {
        +                                          "description": "Start offset of match",
        +                                          "maximum": 9007199254740991,
        +                                          "minimum": 0,
        +                                          "type": "integer"
        +                                        }
        +                                      },
        +                                      "required": [
        +                                        "start",
        +                                        "end"
        +                                      ],
        +                                      "type": "object"
        +                                    },
        +                                    "type": "array"
        +                                  },
        +                                  "value": {
        +                                    "description": "Matched code snippet context",
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "value"
        +                                ],
        +                                "type": "object"
        +                              }
        +                            ]
        +                          },
        +                          "type": "array"
        +                        }
        +                      },
        +                      "required": [
        +                        "path"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "hints": {
        +                    "description": "Contextual hints and suggestions for next steps or better queries",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "outputPagination": {
        +                    "additionalProperties": false,
        +                    "description": "Payload pagination metadata when the result body was size-paginated",
        +                    "properties": {
        +                      "charLength": {
        +                        "description": "Character length of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "charOffset": {
        +                        "description": "Character offset of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "totalChars": {
        +                        "description": "Total number of characters in the full output",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "charOffset",
        +                      "charLength",
        +                      "totalChars"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "pagination": {
        +                    "additionalProperties": false,
        +                    "description": "Pagination info for navigating through search results",
        +                    "properties": {
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "perPage": {
        +                        "description": "Results returned per page",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "totalMatches": {
        +                        "description": "Total matching results across all pages",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "perPage",
        +                      "totalMatches"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "repositoryContext": {
        +                    "additionalProperties": false,
        +                    "description": "Repository context metadata for single-repository searches",
        +                    "properties": {
        +                      "branch": {
        +                        "description": "Default branch of the repository",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "branch"
        +                    ],
        +                    "type": "object"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "hasResults",
        +                "description": "Indicates the query returned results successfully",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": {},
        +                "description": "Empty result metadata (may contain hints or paging details)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "empty",
        +                "description": "Indicates the query returned no matching results",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "Error details including message, type, and recovery hints",
        +                "properties": {
        +                  "cwd": {
        +                    "description": "Working directory relevant to the error",
        +                    "type": "string"
        +                  },
        +                  "error": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "error": {
        +                            "description": "GitHub API error message",
        +                            "type": "string"
        +                          },
        +                          "hints": {
        +                            "description": "Provider-specific hints",
        +                            "items": {
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          "rateLimitRemaining": {
        +                            "description": "Remaining API requests in the current rate limit window",
        +                            "type": "number"
        +                          },
        +                          "rateLimitReset": {
        +                            "description": "Rate limit reset time in milliseconds since epoch",
        +                            "type": "number"
        +                          },
        +                          "retryAfter": {
        +                            "description": "Retry-after delay in seconds",
        +                            "type": "number"
        +                          },
        +                          "scopesSuggestion": {
        +                            "description": "Suggested scopes needed to resolve the error",
        +                            "type": "string"
        +                          },
        +                          "status": {
        +                            "description": "HTTP status code",
        +                            "maximum": 9007199254740991,
        +                            "minimum": -9007199254740991,
        +                            "type": "integer"
        +                          },
        +                          "type": {
        +                            "description": "GitHub API error category",
        +                            "enum": [
        +                              "http",
        +                              "graphql",
        +                              "network",
        +                              "unknown"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "error",
        +                          "type"
        +                        ],
        +                        "type": "object"
        +                      }
        +                    ],
        +                    "description": "Error message or API error object"
        +                  },
        +                  "errorCode": {
        +                    "description": "Tool error code",
        +                    "type": "string"
        +                  },
        +                  "errorType": {
        +                    "description": "Tool-specific error type (e.g. symbol_not_found, size_limit)",
        +                    "type": "string"
        +                  },
        +                  "hints": {
        +                    "description": "Recovery hints",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "resolvedPath": {
        +                    "description": "Resolved filesystem path involved in the error",
        +                    "type": "string"
        +                  },
        +                  "searchRadius": {
        +                    "description": "LSP search radius when symbol not found",
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "error"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "error",
        +                "description": "Indicates the query encountered an error",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • ChangedgithubSearchPullRequests57 fields changed
      • removedInput schema / properties / queries / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / queries / items / properties / assignee / description
        Added value: +"Assigned user"
      • addedInput schema / properties / queries / items / properties / author / description
        Added value: +"PR author"
      • addedInput schema / properties / queries / items / properties / base / description
        Added value: +"Target branch"
      • addedInput schema / properties / queries / items / properties / charLength
        Added value: +{
        +  "description": "",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / charOffset
        Added value: +{
        +  "description": "",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / closed / description
        Added value: +"Closed date: \">=YYYY-MM-DD\""
      • addedInput schema / properties / queries / items / properties / commenter / description
        Added value: +"User who commented"
      • changedInput schema / properties / queries / items / properties / comments / anyOf
        Previous value: -[
        -  {
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / queries / items / properties / comments / description
        Added value: +"Comment count: \">5\", \"10..20\""
      • addedInput schema / properties / queries / items / properties / created / description
        Added value: +"Date filter: \">=YYYY-MM-DD\" or \"YYYY-MM-DD..YYYY-MM-DD\""
      • addedInput schema / properties / queries / items / properties / draft / description
        Added value: +"Draft status"
      • addedInput schema / properties / queries / items / properties / head / description
        Added value: +"Source branch"
      • addedInput schema / properties / queries / items / properties / id
        Added value: +{
        +  "description": "Stable query identifier used to match each result to its input query. Required for every query. Use a short meaningful string like \"react_hooks_search\" or \"router_prs\".",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9._:-]+$",
        +  "type": "string"
        +}
      • changedInput schema / properties / queries / items / properties / interactions / anyOf
        Previous value: -[
        -  {
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / queries / items / properties / interactions / description
        Added value: +"Comments + reactions count"
      • addedInput schema / properties / queries / items / properties / involves / description
        Added value: +"User involved"
      • addedInput schema / properties / queries / items / properties / label / description
        Added value: +"Label filter"
      • addedInput schema / properties / queries / items / properties / limit / description
        Added value: +"Max PRs (1-10). Default: 5"
      • changedInput schema / properties / queries / items / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / queries / items / properties / mainResearchGoal / description
        Added value: +"Main research objective (multiple queries can share the same main goal for semantic grouping and session tracking)"
      • addedInput schema / properties / queries / items / properties / match / description
        Added value: +"[\"title\"|\"body\"|\"comments\"]. Default: all"
      • addedInput schema / properties / queries / items / properties / mentions / description
        Added value: +"Mentions @user"
      • addedInput schema / properties / queries / items / properties / merged / description
        Added value: +"Merged status (requires state=closed)"
      • addedInput schema / properties / queries / items / properties / merged-at / description
        Added value: +"Merged date: \">=YYYY-MM-DD\""
      • addedInput schema / properties / queries / items / properties / no-assignee / description
        Added value: +"No assignee"
      • addedInput schema / properties / queries / items / properties / no-label / description
        Added value: +"No labels"
      • addedInput schema / properties / queries / items / properties / no-milestone / description
        Added value: +"No milestone"
      • addedInput schema / properties / queries / items / properties / no-project / description
        Added value: +"Not in project"
      • addedInput schema / properties / queries / items / properties / order / description
        Added value: +"desc (default) | asc"
      • addedInput schema / properties / queries / items / properties / owner / description
        Added value: +"Repo owner"
      • addedInput schema / properties / queries / items / properties / page / description
        Added value: +"Page (1-10). Default: 1"
      • addedInput schema / properties / queries / items / properties / partialContentMetadata / description
        Added value: +"[{\"file\": \"path\"}] or [{\"file\": \"path\", \"additions\": [1,2]}]"
      • removedInput schema / properties / queries / items / properties / partialContentMetadata / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / queries / items / properties / partialContentMetadata / items / properties / additions / description
        Added value: +"Specific addition line numbers to include from the diff"
      • addedInput schema / properties / queries / items / properties / partialContentMetadata / items / properties / deletions / description
        Added value: +"Specific deletion line numbers to include from the diff"
      • addedInput schema / properties / queries / items / properties / partialContentMetadata / items / properties / file / description
        Added value: +"File path within the PR diff to fetch partial content for"
      • addedInput schema / properties / queries / items / properties / prNumber / description
        Added value: +"Direct PR number (ignores other filters)"
      • addedInput schema / properties / queries / items / properties / prNumber / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / queries / items / properties / query / description
        Added value: +"Search across title, body, comments (max 256 chars)"
      • changedInput schema / properties / queries / items / properties / reactions / anyOf
        Previous value: -[
        -  {
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        +    "type": "string"
        +  }
        +]
      • addedInput schema / properties / queries / items / properties / reactions / description
        Added value: +"Reaction count filter"
      • addedInput schema / properties / queries / items / properties / reasoning / description
        Added value: +"Why this query helps achieve the goal"
      • addedInput schema / properties / queries / items / properties / repo / description
        Added value: +"Repo name"
      • addedInput schema / properties / queries / items / properties / researchGoal / description
        Added value: +"Specific information this query seeks"
      • addedInput schema / properties / queries / items / properties / review-requested / description
        Added value: +"Requested reviewer"
      • addedInput schema / properties / queries / items / properties / reviewed-by / description
        Added value: +"Reviewer"
      • addedInput schema / properties / queries / items / properties / sort / description
        Added value: +"created | updated | best-match"
      • addedInput schema / properties / queries / items / properties / state / description
        Added value: +"\"open\" or \"closed\""
      • addedInput schema / properties / queries / items / properties / type / description
        Added value: +"metadata | fullContent | partialContent. Default: metadata"
      • addedInput schema / properties / queries / items / properties / updated / description
        Added value: +"Last update: \">=YYYY-MM-DD\""
      • addedInput schema / properties / queries / items / properties / withComments / description
        Added value: +"Include discussions (token expensive)"
      • addedInput schema / properties / queries / items / properties / withCommits / description
        Added value: +"Include commit details"
      • changedInput schema / properties / queries / items / required
        Previous value: -[
        -  "mainResearchGoal",
        -  "researchGoal",
        -  "reasoning"
        -]New value: +[
        +  "id",
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning"
        +]
      • addedInput schema / properties / responseCharLength
        Added value: +{
        +  "description": "Character budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / responseCharOffset
        Added value: +{
        +  "description": "Character offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "responsePagination": {
        +      "additionalProperties": false,
        +      "description": "Pagination metadata for top-level bulk response pagination across results[]",
        +      "properties": {
        +        "charLength": {
        +          "description": "Character length of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "charOffset": {
        +          "description": "Character offset of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "currentPage": {
        +          "description": "Current page number (1-indexed)",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        },
        +        "hasMore": {
        +          "description": "Whether more pages are available after the current page",
        +          "type": "boolean"
        +        },
        +        "totalChars": {
        +          "description": "Total number of characters in the full output",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "totalPages": {
        +          "description": "Total number of pages available",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "currentPage",
        +        "totalPages",
        +        "hasMore",
        +        "charOffset",
        +        "charLength",
        +        "totalChars"
        +      ],
        +      "type": "object"
        +    },
        +    "results": {
        +      "description": "Array of results, one per input query, discriminated by status",
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "The tool-specific result data",
        +                "properties": {
        +                  "hints": {
        +                    "description": "Contextual hints and suggestions for next steps or better queries",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "outputPagination": {
        +                    "additionalProperties": false,
        +                    "description": "Output pagination metadata when the rendered payload was truncated",
        +                    "properties": {
        +                      "charLength": {
        +                        "description": "Character length of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "charOffset": {
        +                        "description": "Character offset of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "totalChars": {
        +                        "description": "Total number of characters in the full output",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "charOffset",
        +                      "charLength",
        +                      "totalChars"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "pagination": {
        +                    "additionalProperties": false,
        +                    "description": "Pagination info for navigating through pull request results",
        +                    "properties": {
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "perPage": {
        +                        "description": "Results returned per page",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "totalMatches": {
        +                        "description": "Total matching results across all pages",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "perPage",
        +                      "totalMatches"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "pull_requests": {
        +                    "description": "Pull request results",
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "additions": {
        +                          "description": "Lines added across the pull request",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "assignees": {
        +                          "description": "Assigned usernames",
        +                          "items": {
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "author": {
        +                          "description": "Author username",
        +                          "type": "string"
        +                        },
        +                        "body": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Pull request body"
        +                        },
        +                        "changedFilesCount": {
        +                          "description": "Number of changed files",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "closedAt": {
        +                          "description": "Closed timestamp",
        +                          "type": "string"
        +                        },
        +                        "comments": {
        +                          "description": "Expanded pull request comments",
        +                          "items": {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "author": {
        +                                "description": "Comment author username",
        +                                "type": "string"
        +                              },
        +                              "body": {
        +                                "description": "Comment body",
        +                                "type": "string"
        +                              },
        +                              "createdAt": {
        +                                "description": "Comment creation timestamp",
        +                                "type": "string"
        +                              },
        +                              "id": {
        +                                "description": "Comment identifier",
        +                                "type": "string"
        +                              },
        +                              "updatedAt": {
        +                                "description": "Comment update timestamp",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "id",
        +                              "author",
        +                              "body",
        +                              "createdAt",
        +                              "updatedAt"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "commentsCount": {
        +                          "description": "Number of comments on the pull request",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "createdAt": {
        +                          "description": "Creation timestamp",
        +                          "type": "string"
        +                        },
        +                        "deletions": {
        +                          "description": "Lines deleted across the pull request",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "draft": {
        +                          "description": "Whether the pull request is a draft",
        +                          "type": "boolean"
        +                        },
        +                        "fileChanges": {
        +                          "description": "Expanded changed-file details",
        +                          "items": {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "additions": {
        +                                "description": "Lines added in this file",
        +                                "maximum": 9007199254740991,
        +                                "minimum": 0,
        +                                "type": "integer"
        +                              },
        +                              "deletions": {
        +                                "description": "Lines deleted in this file",
        +                                "maximum": 9007199254740991,
        +                                "minimum": 0,
        +                                "type": "integer"
        +                              },
        +                              "patch": {
        +                                "description": "Diff patch for the file",
        +                                "type": "string"
        +                              },
        +                              "path": {
        +                                "description": "File path inside the pull request diff",
        +                                "type": "string"
        +                              },
        +                              "status": {
        +                                "description": "Git change status for the file",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "path",
        +                              "status",
        +                              "additions",
        +                              "deletions"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "labels": {
        +                          "description": "Applied label names",
        +                          "items": {
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "mergedAt": {
        +                          "description": "Merged timestamp",
        +                          "type": "string"
        +                        },
        +                        "number": {
        +                          "description": "Pull request number",
        +                          "exclusiveMinimum": 0,
        +                          "maximum": 9007199254740991,
        +                          "type": "integer"
        +                        },
        +                        "sourceBranch": {
        +                          "description": "Source branch name",
        +                          "type": "string"
        +                        },
        +                        "sourceSha": {
        +                          "description": "Source branch commit SHA",
        +                          "type": "string"
        +                        },
        +                        "state": {
        +                          "description": "Pull request state",
        +                          "enum": [
        +                            "open",
        +                            "closed",
        +                            "merged"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "targetBranch": {
        +                          "description": "Target branch name",
        +                          "type": "string"
        +                        },
        +                        "targetSha": {
        +                          "description": "Target branch commit SHA",
        +                          "type": "string"
        +                        },
        +                        "title": {
        +                          "description": "Pull request title",
        +                          "type": "string"
        +                        },
        +                        "updatedAt": {
        +                          "description": "Last update timestamp",
        +                          "type": "string"
        +                        },
        +                        "url": {
        +                          "description": "Web URL for the pull request",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "number",
        +                        "title",
        +                        "url",
        +                        "state",
        +                        "draft",
        +                        "author",
        +                        "sourceBranch",
        +                        "targetBranch",
        +                        "createdAt",
        +                        "updatedAt"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "total_count": {
        +                    "description": "Total number of matching pull requests",
        +                    "maximum": 9007199254740991,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "hasResults",
        +                "description": "Indicates the query returned results successfully",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": {},
        +                "description": "Empty result metadata (may contain hints or paging details)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "empty",
        +                "description": "Indicates the query returned no matching results",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "Error details including message, type, and recovery hints",
        +                "properties": {
        +                  "cwd": {
        +                    "description": "Working directory relevant to the error",
        +                    "type": "string"
        +                  },
        +                  "error": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "error": {
        +                            "description": "GitHub API error message",
        +                            "type": "string"
        +                          },
        +                          "hints": {
        +                            "description": "Provider-specific hints",
        +                            "items": {
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          "rateLimitRemaining": {
        +                            "description": "Remaining API requests in the current rate limit window",
        +                            "type": "number"
        +                          },
        +                          "rateLimitReset": {
        +                            "description": "Rate limit reset time in milliseconds since epoch",
        +                            "type": "number"
        +                          },
        +                          "retryAfter": {
        +                            "description": "Retry-after delay in seconds",
        +                            "type": "number"
        +                          },
        +                          "scopesSuggestion": {
        +                            "description": "Suggested scopes needed to resolve the error",
        +                            "type": "string"
        +                          },
        +                          "status": {
        +                            "description": "HTTP status code",
        +                            "maximum": 9007199254740991,
        +                            "minimum": -9007199254740991,
        +                            "type": "integer"
        +                          },
        +                          "type": {
        +                            "description": "GitHub API error category",
        +                            "enum": [
        +                              "http",
        +                              "graphql",
        +                              "network",
        +                              "unknown"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "error",
        +                          "type"
        +                        ],
        +                        "type": "object"
        +                      }
        +                    ],
        +                    "description": "Error message or API error object"
        +                  },
        +                  "errorCode": {
        +                    "description": "Tool error code",
        +                    "type": "string"
        +                  },
        +                  "errorType": {
        +                    "description": "Tool-specific error type (e.g. symbol_not_found, size_limit)",
        +                    "type": "string"
        +                  },
        +                  "hints": {
        +                    "description": "Recovery hints",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "resolvedPath": {
        +                    "description": "Resolved filesystem path involved in the error",
        +                    "type": "string"
        +                  },
        +                  "searchRadius": {
        +                    "description": "LSP search radius when symbol not found",
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "error"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "error",
        +                "description": "Indicates the query encountered an error",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • ChangedgithubSearchRepositories22 fields changed
      • removedInput schema / properties / queries / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / queries / items / properties / charLength
        Added value: +{
        +  "description": "Character budget for output pagination after domain pagination has been applied.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / charOffset
        Added value: +{
        +  "description": "Character offset for output pagination after domain pagination has been applied.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / created / description
        Added value: +"Date: \">=YYYY-MM-DD\" or \"YYYY-MM-DD..YYYY-MM-DD\""
      • addedInput schema / properties / queries / items / properties / id
        Added value: +{
        +  "description": "Stable query identifier used to match each result to its input query. Required for every query. Use a short meaningful string like \"react_hooks_search\" or \"router_prs\".",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9._:-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / keywordsToSearch / description
        Added value: +"Keywords (AND logic) across name, description, README"
      • addedInput schema / properties / queries / items / properties / limit / description
        Added value: +"Max repos (1-100). Default: 10"
      • addedInput schema / properties / queries / items / properties / mainResearchGoal / description
        Added value: +"Main research objective (multiple queries can share the same main goal for semantic grouping and session tracking)"
      • addedInput schema / properties / queries / items / properties / match / description
        Added value: +"[\"name\"|\"description\"|\"readme\"]. Very restrictive"
      • addedInput schema / properties / queries / items / properties / owner / description
        Added value: +"Repo owner/org to scope results"
      • addedInput schema / properties / queries / items / properties / page / description
        Added value: +"Page (1-10). Default: 1"
      • addedInput schema / properties / queries / items / properties / reasoning / description
        Added value: +"Why this query helps achieve the goal"
      • addedInput schema / properties / queries / items / properties / researchGoal / description
        Added value: +"Specific information this query seeks"
      • addedInput schema / properties / queries / items / properties / size / description
        Added value: +"Repo size in KB with operators"
      • addedInput schema / properties / queries / items / properties / sort / description
        Added value: +"stars | forks | updated | best-match"
      • addedInput schema / properties / queries / items / properties / stars / description
        Added value: +"Stars filter: \">500\", \"100..500\""
      • addedInput schema / properties / queries / items / properties / topicsToSearch / description
        Added value: +"GitHub topic tags"
      • addedInput schema / properties / queries / items / properties / updated / description
        Added value: +"Last metadata update (not code pushes)"
      • changedInput schema / properties / queries / items / required
        Previous value: -[
        -  "mainResearchGoal",
        -  "researchGoal",
        -  "reasoning"
        -]New value: +[
        +  "id",
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning"
        +]
      • addedInput schema / properties / responseCharLength
        Added value: +{
        +  "description": "Character budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / responseCharOffset
        Added value: +{
        +  "description": "Character offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "responsePagination": {
        +      "additionalProperties": false,
        +      "description": "Pagination metadata for top-level bulk response pagination across results[]",
        +      "properties": {
        +        "charLength": {
        +          "description": "Character length of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "charOffset": {
        +          "description": "Character offset of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "currentPage": {
        +          "description": "Current page number (1-indexed)",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        },
        +        "hasMore": {
        +          "description": "Whether more pages are available after the current page",
        +          "type": "boolean"
        +        },
        +        "totalChars": {
        +          "description": "Total number of characters in the full output",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "totalPages": {
        +          "description": "Total number of pages available",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "currentPage",
        +        "totalPages",
        +        "hasMore",
        +        "charOffset",
        +        "charLength",
        +        "totalChars"
        +      ],
        +      "type": "object"
        +    },
        +    "results": {
        +      "description": "Array of results, one per input query, discriminated by status",
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "The tool-specific result data",
        +                "properties": {
        +                  "hints": {
        +                    "description": "Contextual hints and suggestions for next steps or better queries",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "outputPagination": {
        +                    "additionalProperties": false,
        +                    "description": "Payload pagination metadata when the result body was size-paginated",
        +                    "properties": {
        +                      "charLength": {
        +                        "description": "Character length of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "charOffset": {
        +                        "description": "Character offset of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "totalChars": {
        +                        "description": "Total number of characters in the full output",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "charOffset",
        +                      "charLength",
        +                      "totalChars"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "pagination": {
        +                    "additionalProperties": false,
        +                    "description": "Pagination info for navigating through repository results",
        +                    "properties": {
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "perPage": {
        +                        "description": "Results returned per page",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "totalMatches": {
        +                        "description": "Total matching results across all pages",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "perPage",
        +                      "totalMatches"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "repositories": {
        +                    "description": "Matching repositories",
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "createdAt": {
        +                          "description": "Creation timestamp",
        +                          "type": "string"
        +                        },
        +                        "defaultBranch": {
        +                          "description": "Default branch of the repository",
        +                          "type": "string"
        +                        },
        +                        "description": {
        +                          "description": "Repository description",
        +                          "type": "string"
        +                        },
        +                        "forksCount": {
        +                          "description": "Fork count",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "language": {
        +                          "description": "Primary programming language of the repository",
        +                          "type": "string"
        +                        },
        +                        "openIssuesCount": {
        +                          "description": "Open issues count",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "owner": {
        +                          "description": "Repository owner",
        +                          "type": "string"
        +                        },
        +                        "pushedAt": {
        +                          "description": "Last push timestamp",
        +                          "type": "string"
        +                        },
        +                        "repo": {
        +                          "description": "Repository name",
        +                          "type": "string"
        +                        },
        +                        "stars": {
        +                          "description": "Star count",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        },
        +                        "topics": {
        +                          "description": "Repository topics",
        +                          "items": {
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "updatedAt": {
        +                          "description": "Last update timestamp",
        +                          "type": "string"
        +                        },
        +                        "url": {
        +                          "description": "Web URL for the repository",
        +                          "type": "string"
        +                        },
        +                        "visibility": {
        +                          "description": "Repository visibility",
        +                          "enum": [
        +                            "public",
        +                            "private",
        +                            "internal"
        +                          ],
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "owner",
        +                        "repo",
        +                        "stars",
        +                        "description",
        +                        "url",
        +                        "createdAt",
        +                        "updatedAt",
        +                        "pushedAt"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "repositories"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "hasResults",
        +                "description": "Indicates the query returned results successfully",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": {},
        +                "description": "Empty result metadata (may contain hints or paging details)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "empty",
        +                "description": "Indicates the query returned no matching results",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "Error details including message, type, and recovery hints",
        +                "properties": {
        +                  "cwd": {
        +                    "description": "Working directory relevant to the error",
        +                    "type": "string"
        +                  },
        +                  "error": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "error": {
        +                            "description": "GitHub API error message",
        +                            "type": "string"
        +                          },
        +                          "hints": {
        +                            "description": "Provider-specific hints",
        +                            "items": {
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          "rateLimitRemaining": {
        +                            "description": "Remaining API requests in the current rate limit window",
        +                            "type": "number"
        +                          },
        +                          "rateLimitReset": {
        +                            "description": "Rate limit reset time in milliseconds since epoch",
        +                            "type": "number"
        +                          },
        +                          "retryAfter": {
        +                            "description": "Retry-after delay in seconds",
        +                            "type": "number"
        +                          },
        +                          "scopesSuggestion": {
        +                            "description": "Suggested scopes needed to resolve the error",
        +                            "type": "string"
        +                          },
        +                          "status": {
        +                            "description": "HTTP status code",
        +                            "maximum": 9007199254740991,
        +                            "minimum": -9007199254740991,
        +                            "type": "integer"
        +                          },
        +                          "type": {
        +                            "description": "GitHub API error category",
        +                            "enum": [
        +                              "http",
        +                              "graphql",
        +                              "network",
        +                              "unknown"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "error",
        +                          "type"
        +                        ],
        +                        "type": "object"
        +                      }
        +                    ],
        +                    "description": "Error message or API error object"
        +                  },
        +                  "errorCode": {
        +                    "description": "Tool error code",
        +                    "type": "string"
        +                  },
        +                  "errorType": {
        +                    "description": "Tool-specific error type (e.g. symbol_not_found, size_limit)",
        +                    "type": "string"
        +                  },
        +                  "hints": {
        +                    "description": "Recovery hints",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "resolvedPath": {
        +                    "description": "Resolved filesystem path involved in the error",
        +                    "type": "string"
        +                  },
        +                  "searchRadius": {
        +                    "description": "LSP search radius when symbol not found",
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "error"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "error",
        +                "description": "Indicates the query encountered an error",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • ChangedgithubViewRepoStructure22 fields changed
      • removedInput schema / properties / queries / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / queries / items / properties / branch / description
        Added value: +"Branch/tag/SHA (optional, defaults to default branch). Use main/master or get from githubSearchRepositories"
      • addedInput schema / properties / queries / items / properties / charLength
        Added value: +{
        +  "description": "Character budget for output pagination after entry pagination has been applied.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / charOffset
        Added value: +{
        +  "description": "Character offset for output pagination after entry pagination has been applied.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / depth / description
        Added value: +"1 (current) or 2 (subdirs). Default: 1"
      • changedInput schema / properties / queries / items / properties / depth / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / queries / items / properties / entriesPerPage / description
        Added value: +"Entries per page (default: 50, max: 200)"
      • changedInput schema / properties / queries / items / properties / entriesPerPage / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / queries / items / properties / entryPageNumber / description
        Added value: +"Page number (1-based). Default: 1"
      • addedInput schema / properties / queries / items / properties / entryPageNumber / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / queries / items / properties / entryPageNumber / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / queries / items / properties / id
        Added value: +{
        +  "description": "Stable query identifier used to match each result to its input query. Required for every query. Use a short meaningful string like \"react_hooks_search\" or \"router_prs\".",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9._:-]+$",
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / mainResearchGoal / description
        Added value: +"Main research objective (multiple queries can share the same main goal for semantic grouping and session tracking)"
      • addedInput schema / properties / queries / items / properties / owner / description
        Added value: +"Repo owner"
      • addedInput schema / properties / queries / items / properties / path / description
        Added value: +"Directory path (empty for root)"
      • addedInput schema / properties / queries / items / properties / reasoning / description
        Added value: +"Why this query helps achieve the goal"
      • addedInput schema / properties / queries / items / properties / repo / description
        Added value: +"Repo name"
      • addedInput schema / properties / queries / items / properties / researchGoal / description
        Added value: +"Specific information this query seeks"
      • changedInput schema / properties / queries / items / required
        Previous value: -[
        -  "mainResearchGoal",
        -  "researchGoal",
        -  "reasoning",
        -  "owner",
        -  "repo",
        -  "branch"
        -]New value: +[
        +  "id",
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning",
        +  "owner",
        +  "repo"
        +]
      • addedInput schema / properties / responseCharLength
        Added value: +{
        +  "description": "Character budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / responseCharOffset
        Added value: +{
        +  "description": "Character offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "responsePagination": {
        +      "additionalProperties": false,
        +      "description": "Pagination metadata for top-level bulk response pagination across results[]",
        +      "properties": {
        +        "charLength": {
        +          "description": "Character length of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "charOffset": {
        +          "description": "Character offset of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "currentPage": {
        +          "description": "Current page number (1-indexed)",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        },
        +        "hasMore": {
        +          "description": "Whether more pages are available after the current page",
        +          "type": "boolean"
        +        },
        +        "totalChars": {
        +          "description": "Total number of characters in the full output",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "totalPages": {
        +          "description": "Total number of pages available",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "currentPage",
        +        "totalPages",
        +        "hasMore",
        +        "charOffset",
        +        "charLength",
        +        "totalChars"
        +      ],
        +      "type": "object"
        +    },
        +    "results": {
        +      "description": "Array of results, one per input query, discriminated by status",
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "The tool-specific result data",
        +                "properties": {
        +                  "branchFallback": {
        +                    "additionalProperties": false,
        +                    "description": "Branch fallback details when the requested branch was not used",
        +                    "properties": {
        +                      "actualBranch": {
        +                        "description": "Branch actually used in the result",
        +                        "type": "string"
        +                      },
        +                      "defaultBranch": {
        +                        "description": "Repository default branch when known",
        +                        "type": "string"
        +                      },
        +                      "requestedBranch": {
        +                        "description": "Branch requested in the query",
        +                        "type": "string"
        +                      },
        +                      "warning": {
        +                        "description": "Human-readable explanation of the branch fallback",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "requestedBranch",
        +                      "actualBranch",
        +                      "warning"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "hints": {
        +                    "description": "Contextual hints and suggestions for next steps or better queries",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "outputPagination": {
        +                    "additionalProperties": false,
        +                    "description": "Payload pagination metadata when the structure payload was size-paginated",
        +                    "properties": {
        +                      "charLength": {
        +                        "description": "Character length of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "charOffset": {
        +                        "description": "Character offset of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "totalChars": {
        +                        "description": "Total number of characters in the full output",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "charOffset",
        +                      "charLength",
        +                      "totalChars"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "pagination": {
        +                    "additionalProperties": false,
        +                    "description": "Pagination info for large directory listings",
        +                    "properties": {
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "entriesPerPage": {
        +                        "description": "Directory entries returned per page",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "totalEntries": {
        +                        "description": "Total matching entries across all pages",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "entriesPerPage",
        +                      "totalEntries"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "resolvedBranch": {
        +                    "description": "Resolved branch used when the input query omitted a branch",
        +                    "type": "string"
        +                  },
        +                  "structure": {
        +                    "additionalProperties": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "files": {
        +                          "description": "File names in the directory",
        +                          "items": {
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "folders": {
        +                          "description": "Subdirectory names in the directory",
        +                          "items": {
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        }
        +                      },
        +                      "required": [
        +                        "files",
        +                        "folders"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "description": "Directory structure grouped by relative path",
        +                    "propertyNames": {
        +                      "type": "string"
        +                    },
        +                    "type": "object"
        +                  },
        +                  "summary": {
        +                    "additionalProperties": false,
        +                    "description": "Summary statistics for the returned repository structure",
        +                    "properties": {
        +                      "totalFiles": {
        +                        "description": "Total files included in the structure result",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalFolders": {
        +                        "description": "Total folders included in the structure result",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "truncated": {
        +                        "description": "Whether the provider truncated the structure result",
        +                        "type": "boolean"
        +                      }
        +                    },
        +                    "required": [
        +                      "totalFiles",
        +                      "totalFolders",
        +                      "truncated"
        +                    ],
        +                    "type": "object"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "hasResults",
        +                "description": "Indicates the query returned results successfully",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": {},
        +                "description": "Empty result metadata (may contain hints or paging details)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "empty",
        +                "description": "Indicates the query returned no matching results",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "Error details including message, type, and recovery hints",
        +                "properties": {
        +                  "cwd": {
        +                    "description": "Working directory relevant to the error",
        +                    "type": "string"
        +                  },
        +                  "error": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "error": {
        +                            "description": "GitHub API error message",
        +                            "type": "string"
        +                          },
        +                          "hints": {
        +                            "description": "Provider-specific hints",
        +                            "items": {
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          "rateLimitRemaining": {
        +                            "description": "Remaining API requests in the current rate limit window",
        +                            "type": "number"
        +                          },
        +                          "rateLimitReset": {
        +                            "description": "Rate limit reset time in milliseconds since epoch",
        +                            "type": "number"
        +                          },
        +                          "retryAfter": {
        +                            "description": "Retry-after delay in seconds",
        +                            "type": "number"
        +                          },
        +                          "scopesSuggestion": {
        +                            "description": "Suggested scopes needed to resolve the error",
        +                            "type": "string"
        +                          },
        +                          "status": {
        +                            "description": "HTTP status code",
        +                            "maximum": 9007199254740991,
        +                            "minimum": -9007199254740991,
        +                            "type": "integer"
        +                          },
        +                          "type": {
        +                            "description": "GitHub API error category",
        +                            "enum": [
        +                              "http",
        +                              "graphql",
        +                              "network",
        +                              "unknown"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "error",
        +                          "type"
        +                        ],
        +                        "type": "object"
        +                      }
        +                    ],
        +                    "description": "Error message or API error object"
        +                  },
        +                  "errorCode": {
        +                    "description": "Tool error code",
        +                    "type": "string"
        +                  },
        +                  "errorType": {
        +                    "description": "Tool-specific error type (e.g. symbol_not_found, size_limit)",
        +                    "type": "string"
        +                  },
        +                  "hints": {
        +                    "description": "Recovery hints",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "resolvedPath": {
        +                    "description": "Resolved filesystem path involved in the error",
        +                    "type": "string"
        +                  },
        +                  "searchRadius": {
        +                    "description": "LSP search radius when symbol not found",
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "error"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "error",
        +                "description": "Indicates the query encountered an error",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • AddedlocalFindFiles
    • AddedlocalGetFileContent
    • AddedlocalSearchCode
    • AddedlocalViewStructure
    • AddedlspCallHierarchy
    • AddedlspFindReferences
    • AddedlspGotoDefinition
    • ChangedpackageSearch4 fields changed
      • changedInput schema / properties / queries / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ecosystem": {
        -        "const": "npm",
        -        "type": "string"
        -      },
        -      "mainResearchGoal": {
        -        "type": "string"
        -      },
        -      "name": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "npmFetchMetadata": {
        -        "default": false,
        -        "type": "boolean"
        -      },
        -      "reasoning": {
        -        "type": "string"
        -      },
        -      "researchGoal": {
        -        "type": "string"
        -      },
        -      "searchLimit": {
        -        "default": 1,
        -        "maximum": 10,
        -        "minimum": 1,
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "mainResearchGoal",
        -      "researchGoal",
        -      "reasoning",
        -      "name",
        -      "ecosystem"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ecosystem": {
        -        "const": "python",
        -        "type": "string"
        -      },
        -      "mainResearchGoal": {
        -        "$ref": "#/properties/queries/items/anyOf/0/properties/mainResearchGoal"
        -      },
        -      "name": {
        -        "$ref": "#/properties/queries/items/anyOf/0/properties/name"
        -      },
        -      "pythonFetchMetadata": {
        -        "default": false,
        -        "type": "boolean"
        -      },
        -      "reasoning": {
        -        "$ref": "#/properties/queries/items/anyOf/0/properties/reasoning"
        -      },
        -      "researchGoal": {
        -        "$ref": "#/properties/queries/items/anyOf/0/properties/researchGoal"
        -      },
        -      "searchLimit": {
        -        "$ref": "#/properties/queries/items/anyOf/0/properties/searchLimit"
        -      }
        -    },
        -    "required": [
        -      "mainResearchGoal",
        -      "researchGoal",
        -      "reasoning",
        -      "name",
        -      "ecosystem"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "charLength": {
        +        "description": "Character budget for output pagination.",
        +        "maximum": 50000,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "charOffset": {
        +        "description": "Character offset for output pagination.",
        +        "maximum": 9007199254740991,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "ecosystem": {
        +        "const": "npm",
        +        "description": "\"npm\" or \"python\"",
        +        "type": "string"
        +      },
        +      "id": {
        +        "description": "Stable query identifier used to match each result to its input query. Required for every query. Use a short meaningful string like \"react_hooks_search\" or \"router_prs\".",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "pattern": "^[A-Za-z0-9._:-]+$",
        +        "type": "string"
        +      },
        +      "mainResearchGoal": {
        +        "description": "Main research objective (multiple queries can share the same main goal for semantic grouping and session tracking)",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Package name or search term",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "npmFetchMetadata": {
        +        "default": false,
        +        "description": "Fetch detailed NPM metadata (slower)",
        +        "type": "boolean"
        +      },
        +      "reasoning": {
        +        "description": "Why this query helps achieve the goal",
        +        "type": "string"
        +      },
        +      "researchGoal": {
        +        "description": "Specific information this query seeks",
        +        "type": "string"
        +      },
        +      "searchLimit": {
        +        "default": 1,
        +        "description": "Max results for NPM (1-10). Python: always 1. Default: 1",
        +        "maximum": 10,
        +        "minimum": 1,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "mainResearchGoal",
        +      "researchGoal",
        +      "reasoning",
        +      "name",
        +      "ecosystem"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "charLength": {
        +        "description": "Character budget for output pagination.",
        +        "maximum": 50000,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "charOffset": {
        +        "description": "Character offset for output pagination.",
        +        "maximum": 9007199254740991,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "ecosystem": {
        +        "const": "python",
        +        "description": "\"npm\" or \"python\"",
        +        "type": "string"
        +      },
        +      "id": {
        +        "description": "Stable query identifier used to match each result to its input query. Required for every query. Use a short meaningful string like \"react_hooks_search\" or \"router_prs\".",
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "pattern": "^[A-Za-z0-9._:-]+$",
        +        "type": "string"
        +      },
        +      "mainResearchGoal": {
        +        "description": "Main research objective (multiple queries can share the same main goal for semantic grouping and session tracking)",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Package name or search term",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "pythonFetchMetadata": {
        +        "default": false,
        +        "description": "Fetch full metadata (version, author, license)",
        +        "type": "boolean"
        +      },
        +      "reasoning": {
        +        "description": "Why this query helps achieve the goal",
        +        "type": "string"
        +      },
        +      "researchGoal": {
        +        "description": "Specific information this query seeks",
        +        "type": "string"
        +      },
        +      "searchLimit": {
        +        "default": 1,
        +        "description": "Max results for NPM (1-10). Python: always 1. Default: 1",
        +        "maximum": 10,
        +        "minimum": 1,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "mainResearchGoal",
        +      "researchGoal",
        +      "reasoning",
        +      "name",
        +      "ecosystem"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / responseCharLength
        Added value: +{
        +  "description": "Character budget for top-level bulk response pagination across results[]. Overrides the shared default for this call.",
        +  "maximum": 50000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / responseCharOffset
        Added value: +{
        +  "description": "Character offset for top-level bulk response pagination across results[]. Use when a multi-query response was auto-paginated.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "responsePagination": {
        +      "additionalProperties": false,
        +      "description": "Pagination metadata for top-level bulk response pagination across results[]",
        +      "properties": {
        +        "charLength": {
        +          "description": "Character length of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "charOffset": {
        +          "description": "Character offset of the current page",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "currentPage": {
        +          "description": "Current page number (1-indexed)",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        },
        +        "hasMore": {
        +          "description": "Whether more pages are available after the current page",
        +          "type": "boolean"
        +        },
        +        "totalChars": {
        +          "description": "Total number of characters in the full output",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "totalPages": {
        +          "description": "Total number of pages available",
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "currentPage",
        +        "totalPages",
        +        "hasMore",
        +        "charOffset",
        +        "charLength",
        +        "totalChars"
        +      ],
        +      "type": "object"
        +    },
        +    "results": {
        +      "description": "Array of results, one per input query, discriminated by status",
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "The tool-specific result data",
        +                "properties": {
        +                  "hints": {
        +                    "description": "Contextual hints and suggestions for next steps or better queries",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "outputPagination": {
        +                    "additionalProperties": false,
        +                    "description": "Payload pagination metadata when the package list was size-paginated",
        +                    "properties": {
        +                      "charLength": {
        +                        "description": "Character length of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "charOffset": {
        +                        "description": "Character offset of the current page",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "currentPage": {
        +                        "description": "Current page number (1-indexed)",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      },
        +                      "hasMore": {
        +                        "description": "Whether more pages are available after the current page",
        +                        "type": "boolean"
        +                      },
        +                      "totalChars": {
        +                        "description": "Total number of characters in the full output",
        +                        "maximum": 9007199254740991,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "totalPages": {
        +                        "description": "Total number of pages available",
        +                        "exclusiveMinimum": 0,
        +                        "maximum": 9007199254740991,
        +                        "type": "integer"
        +                      }
        +                    },
        +                    "required": [
        +                      "currentPage",
        +                      "totalPages",
        +                      "hasMore",
        +                      "charOffset",
        +                      "charLength",
        +                      "totalChars"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "packages": {
        +                    "description": "Matching packages",
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "author": {
        +                          "description": "Package author",
        +                          "type": "string"
        +                        },
        +                        "dependencies": {
        +                          "additionalProperties": {
        +                            "type": "string"
        +                          },
        +                          "description": "Declared dependencies",
        +                          "propertyNames": {
        +                            "type": "string"
        +                          },
        +                          "type": "object"
        +                        },
        +                        "description": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Package description"
        +                        },
        +                        "engines": {
        +                          "additionalProperties": {
        +                            "type": "string"
        +                          },
        +                          "description": "Engine requirements",
        +                          "propertyNames": {
        +                            "type": "string"
        +                          },
        +                          "type": "object"
        +                        },
        +                        "homepage": {
        +                          "description": "Package homepage",
        +                          "type": "string"
        +                        },
        +                        "keywords": {
        +                          "description": "Package keywords",
        +                          "items": {
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "lastPublished": {
        +                          "description": "Last published timestamp",
        +                          "type": "string"
        +                        },
        +                        "license": {
        +                          "description": "Package license",
        +                          "type": "string"
        +                        },
        +                        "mainEntry": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Main entry point for NPM packages"
        +                        },
        +                        "name": {
        +                          "description": "Package name",
        +                          "type": "string"
        +                        },
        +                        "owner": {
        +                          "description": "Repository owner parsed from the repository URL",
        +                          "type": "string"
        +                        },
        +                        "path": {
        +                          "description": "NPM package path or repository subdirectory",
        +                          "type": "string"
        +                        },
        +                        "peerDependencies": {
        +                          "additionalProperties": {
        +                            "type": "string"
        +                          },
        +                          "description": "Declared peer dependencies",
        +                          "propertyNames": {
        +                            "type": "string"
        +                          },
        +                          "type": "object"
        +                        },
        +                        "repo": {
        +                          "description": "Repository name parsed from the repository URL",
        +                          "type": "string"
        +                        },
        +                        "repoUrl": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Normalized repository URL when available"
        +                        },
        +                        "repository": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Repository URL when available"
        +                        },
        +                        "typeDefinitions": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "Type definition entry point for NPM packages"
        +                        },
        +                        "version": {
        +                          "description": "Package version",
        +                          "type": "string"
        +                        },
        +                        "weeklyDownloads": {
        +                          "description": "Weekly download count from npm registry",
        +                          "maximum": 9007199254740991,
        +                          "minimum": 0,
        +                          "type": "integer"
        +                        }
        +                      },
        +                      "required": [
        +                        "name"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "totalFound": {
        +                    "description": "Total number of packages matching the search query",
        +                    "maximum": 9007199254740991,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  }
        +                },
        +                "required": [
        +                  "packages"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "hasResults",
        +                "description": "Indicates the query returned results successfully",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": {},
        +                "description": "Empty result metadata (may contain hints or paging details)",
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "empty",
        +                "description": "Indicates the query returned no matching results",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "data": {
        +                "additionalProperties": false,
        +                "description": "Error details including message, type, and recovery hints",
        +                "properties": {
        +                  "cwd": {
        +                    "description": "Working directory relevant to the error",
        +                    "type": "string"
        +                  },
        +                  "error": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "error": {
        +                            "description": "GitHub API error message",
        +                            "type": "string"
        +                          },
        +                          "hints": {
        +                            "description": "Provider-specific hints",
        +                            "items": {
        +                              "type": "string"
        +                            },
        +                            "type": "array"
        +                          },
        +                          "rateLimitRemaining": {
        +                            "description": "Remaining API requests in the current rate limit window",
        +                            "type": "number"
        +                          },
        +                          "rateLimitReset": {
        +                            "description": "Rate limit reset time in milliseconds since epoch",
        +                            "type": "number"
        +                          },
        +                          "retryAfter": {
        +                            "description": "Retry-after delay in seconds",
        +                            "type": "number"
        +                          },
        +                          "scopesSuggestion": {
        +                            "description": "Suggested scopes needed to resolve the error",
        +                            "type": "string"
        +                          },
        +                          "status": {
        +                            "description": "HTTP status code",
        +                            "maximum": 9007199254740991,
        +                            "minimum": -9007199254740991,
        +                            "type": "integer"
        +                          },
        +                          "type": {
        +                            "description": "GitHub API error category",
        +                            "enum": [
        +                              "http",
        +                              "graphql",
        +                              "network",
        +                              "unknown"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "error",
        +                          "type"
        +                        ],
        +                        "type": "object"
        +                      }
        +                    ],
        +                    "description": "Error message or API error object"
        +                  },
        +                  "errorCode": {
        +                    "description": "Tool error code",
        +                    "type": "string"
        +                  },
        +                  "errorType": {
        +                    "description": "Tool-specific error type (e.g. symbol_not_found, size_limit)",
        +                    "type": "string"
        +                  },
        +                  "hints": {
        +                    "description": "Recovery hints",
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "resolvedPath": {
        +                    "description": "Resolved filesystem path involved in the error",
        +                    "type": "string"
        +                  },
        +                  "searchRadius": {
        +                    "description": "LSP search radius when symbol not found",
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "error"
        +                ],
        +                "type": "object"
        +              },
        +              "id": {
        +                "description": "Stable query identifier matching the input query id",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "status": {
        +                "const": "error",
        +                "description": "Indicates the query encountered an error",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "status",
        +              "data"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
  2. 10 tool updatesv1.0.0
    • RemovedapiStatusCheck
    • ChangedgithubGetFileContent27 fields changed
      • changedInput schema / properties / queries / description
        Previous value: -"Array of up to 5 different file fetch queries for parallel execution"New value: +"Research queries for githubGetFileContent (1-3 queries per call for optimal resource management). Review schema before use for optimal results"
      • removedInput schema / properties / queries / items / properties / branch / description
        Removed value: -"Branch name, tag name, OR commit SHA. Tool will automatically try 'main' and 'master' if specified branch is not found."
      • removedInput schema / properties / queries / items / properties / branch / pattern
        Removed value: -"^[^\\s]+$"
      • addedInput schema / properties / queries / items / properties / charLength
        Added value: +{
        +  "maximum": 50000,
        +  "minimum": 50,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / charOffset
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedInput schema / properties / queries / items / properties / contextLines
        Removed value: -{
        -  "default": 5,
        -  "description": "Context lines around target range. Default: 5.",
        -  "maximum": 50,
        -  "minimum": 0,
        -  "type": "integer"
        -}
      • removedInput schema / properties / queries / items / properties / endLine / description
        Removed value: -"Ending line number (1-based) for partial file access. Use with startLine to fetch only specific sections and save tokens."
      • removedInput schema / properties / queries / items / properties / fallbackParams
        Removed value: -{
        -  "additionalProperties": false,
        -  "description": "Fallback parameters if original query returns no results",
        -  "properties": {
        -    "branch": {
        -      "type": "string"
        -    },
        -    "contextLines": {
        -      "maximum": 50,
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "endLine": {
        -      "minimum": 1,
        -      "type": "integer"
        -    },
        -    "filePath": {
        -      "type": "string"
        -    },
        -    "minified": {
        -      "type": "boolean"
        -    },
        -    "startLine": {
        -      "minimum": 1,
        -      "type": "integer"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / queries / items / properties / filePath
        Removed value: -{
        -  "description": "File path from repository root (e.g., 'src/index.js', 'README.md', 'docs/api.md'). Do NOT start with slash.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • addedInput schema / properties / queries / items / properties / fullContent
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • removedInput schema / properties / queries / items / properties / id
        Removed value: -{
        -  "description": "Optional identifier for the query",
        -  "type": "string"
        -}
      • addedInput schema / properties / queries / items / properties / mainResearchGoal
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / matchString
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / matchStringContextLines
        Added value: +{
        +  "default": 5,
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / queries / items / properties / minified
        Removed value: -{
        -  "default": true,
        -  "description": "Optimize content for token efficiency (enabled by default). Removes excessive whitespace and comments. Set to false only when exact formatting is required.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / queries / items / properties / owner / description
        Removed value: -"Repository owner/organization name (e.g., 'facebook', 'microsoft'). Do NOT include repository name here."
      • changedInput schema / properties / queries / items / properties / owner / maxLength
        Previous value: -100New value: +200
      • removedInput schema / properties / queries / items / properties / owner / pattern
        Removed value: -"^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$"
      • addedInput schema / properties / queries / items / properties / path
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / reasoning
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / repo / description
        Removed value: -"Repository name only (e.g., 'react', 'vscode'). Do NOT include owner/org prefix."
      • changedInput schema / properties / queries / items / properties / repo / maxLength
        Previous value: -100New value: +150
      • removedInput schema / properties / queries / items / properties / repo / pattern
        Removed value: -"^[a-zA-Z0-9._-]+$"
      • addedInput schema / properties / queries / items / properties / researchGoal
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / startLine / description
        Removed value: -"Starting line number (1-based) for partial file access. STRONGLY RECOMMENDED to save tokens instead of fetching full file content."
      • changedInput schema / properties / queries / items / required
        Previous value: -[
        -  "owner",
        -  "repo",
        -  "branch",
        -  "filePath"
        -]New value: +[
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning",
        +  "owner",
        +  "repo",
        +  "path"
        +]
      • changedInput schema / properties / queries / maxItems
        Previous value: -5New value: +3
    • ChangedgithubSearchCode27 fields changed
      • changedInput schema / properties / queries / description
        Previous value: -"Array of up to 5 different search queries for parallel execution"New value: +"Research queries for githubSearchCode (1-3 queries per call for optimal resource management). Review schema before use for optimal results"
      • removedInput schema / properties / queries / items / properties / extension / description
        Removed value: -"File extension filter"
      • removedInput schema / properties / queries / items / properties / filename / description
        Removed value: -"Target specific filename or pattern"
      • removedInput schema / properties / queries / items / properties / id
        Removed value: -{
        -  "description": "Optional identifier for the query",
        -  "type": "string"
        -}
      • addedInput schema / properties / queries / items / properties / keywordsToSearch
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • removedInput schema / properties / queries / items / properties / language
        Removed value: -{
        -  "description": "Programming language filter",
        -  "type": "string"
        -}
      • addedInput schema / properties / queries / items / properties / limit / default
        Added value: +10
      • removedInput schema / properties / queries / items / properties / limit / description
        Removed value: -"Maximum results per query (1-100)"
      • addedInput schema / properties / queries / items / properties / mainResearchGoal
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / match / description
        Removed value: -"Search scope: file (content) or path (filenames)"
      • removedInput schema / properties / queries / items / properties / minify
        Removed value: -{
        -  "default": true,
        -  "description": "Optimize content for token efficiency (enabled by default). Removes excessive whitespace and comments. Set to false only when exact formatting is required.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / queries / items / properties / owner / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / owner / description
        Removed value: -"Repository owner/organization name"
      • addedInput schema / properties / queries / items / properties / owner / type
        Added value: +"string"
      • addedInput schema / properties / queries / items / properties / page
        Added value: +{
        +  "default": 1,
        +  "maximum": 10,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / queries / items / properties / path
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / queryTerms
        Removed value: -{
        -  "description": "Search terms with AND logic - ALL terms must be present in same file. Use sparingly: single terms get broader results, multiple terms are restrictive.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / queries / items / properties / reasoning
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / repo / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / repo / description
        Removed value: -"Repository name (use with owner for specific repo)"
      • addedInput schema / properties / queries / items / properties / repo / type
        Added value: +"string"
      • addedInput schema / properties / queries / items / properties / researchGoal
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / sanitize
        Removed value: -{
        -  "default": true,
        -  "description": "Sanitize content for security (enabled by default). Removes potential secrets and malicious content. Set to false only when raw content is required.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / queries / items / properties / size
        Removed value: -{
        -  "description": "File size filter in KB",
        -  "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -  "type": "string"
        -}
      • removedInput schema / properties / queries / items / properties / visibility
        Removed value: -{
        -  "description": "Repository visibility",
        -  "enum": [
        -    "public",
        -    "private",
        -    "internal"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / queries / items / required
        Added value: +[
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning",
        +  "keywordsToSearch"
        +]
      • changedInput schema / properties / queries / maxItems
        Previous value: -5New value: +3
    • RemovedgithubSearchCommits
    • RemovedgithubSearchIssues
    • ChangedgithubSearchPullRequests44 fields changed
      • removedInput schema / properties / app
        Removed value: -{
        -  "description": "Filter by GitHub App author",
        -  "type": "string"
        -}
      • removedInput schema / properties / archived
        Removed value: -{
        -  "description": "Filter by repository archived state",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / assignee
        Removed value: -{
        -  "description": "GitHub username of assignee",
        -  "type": "string"
        -}
      • removedInput schema / properties / author
        Removed value: -{
        -  "description": "GitHub username of PR author",
        -  "type": "string"
        -}
      • removedInput schema / properties / base
        Removed value: -{
        -  "description": "Filter on base branch name",
        -  "type": "string"
        -}
      • removedInput schema / properties / checks
        Removed value: -{
        -  "description": "Filter by checks status",
        -  "enum": [
        -    "pending",
        -    "success",
        -    "failure"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / closed
        Removed value: -{
        -  "description": "Filter by closed date (e.g., >2020-01-01)",
        -  "type": "string"
        -}
      • removedInput schema / properties / commenter
        Removed value: -{
        -  "description": "User who commented on PR",
        -  "type": "string"
        -}
      • removedInput schema / properties / comments
        Removed value: -{
        -  "default": false,
        -  "description": "Include comment content in search results. This is a very expensive operation in tokens and should be used with caution.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / created
        Removed value: -{
        -  "description": "Filter by created date (e.g., >2020-01-01)",
        -  "type": "string"
        -}
      • removedInput schema / properties / draft
        Removed value: -{
        -  "description": "Filter by draft state",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / getCommitData
        Removed value: -{
        -  "default": false,
        -  "description": "Set to true to fetch all commits in the PR with their changes. Shows commit messages, authors, and file changes. WARNING: EXTREMELY expensive in tokens - fetches diff/patch content for each commit.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / head
        Removed value: -{
        -  "description": "Filter on head branch name",
        -  "type": "string"
        -}
      • removedInput schema / properties / interactions
        Removed value: -{
        -  "description": "Total interactions (reactions + comments)",
        -  "type": "number"
        -}
      • removedInput schema / properties / involves
        Removed value: -{
        -  "description": "User involved in any way",
        -  "type": "string"
        -}
      • removedInput schema / properties / label
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    }
        -  ],
        -  "description": "Filter by label"
        -}
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Repository language",
        -  "type": "string"
        -}
      • removedInput schema / properties / limit
        Removed value: -{
        -  "default": 30,
        -  "description": "Maximum number of results to fetch",
        -  "maximum": 100,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / locked
        Removed value: -{
        -  "description": "Filter by locked conversation status",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / match
        Removed value: -{
        -  "description": "Restrict search to specific fields",
        -  "items": {
        -    "enum": [
        -      "title",
        -      "body",
        -      "comments"
        -    ],
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / mentions
        Removed value: -{
        -  "description": "PRs mentioning this user",
        -  "type": "string"
        -}
      • removedInput schema / properties / merged
        Removed value: -{
        -  "description": "Filter by merged state",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / merged-at
        Removed value: -{
        -  "description": "Filter by merged date (e.g., >2020-01-01)",
        -  "type": "string"
        -}
      • removedInput schema / properties / milestone
        Removed value: -{
        -  "description": "Milestone title",
        -  "type": "string"
        -}
      • removedInput schema / properties / no-assignee
        Removed value: -{
        -  "description": "Filter by missing assignee",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / no-label
        Removed value: -{
        -  "description": "Filter by missing label",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / no-milestone
        Removed value: -{
        -  "description": "Filter by missing milestone",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / no-project
        Removed value: -{
        -  "description": "Filter by missing project",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / order
        Removed value: -{
        -  "default": "desc",
        -  "description": "Order of results (requires --sort)",
        -  "enum": [
        -    "asc",
        -    "desc"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / owner
        Removed value: -{
        -  "description": "Repository owner (use with repo param)",
        -  "type": "string"
        -}
      • removedInput schema / properties / project
        Removed value: -{
        -  "description": "Project board owner/number",
        -  "type": "string"
        -}
      • addedInput schema / properties / queries
        Added value: +{
        +  "description": "Research queries for githubSearchPullRequests (1-3 queries per call for optimal resource management). Review schema before use for optimal results",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "assignee": {
        +        "type": "string"
        +      },
        +      "author": {
        +        "type": "string"
        +      },
        +      "base": {
        +        "type": "string"
        +      },
        +      "closed": {
        +        "type": "string"
        +      },
        +      "commenter": {
        +        "type": "string"
        +      },
        +      "comments": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          {
        +            "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        +            "type": "string"
        +          }
        +        ]
        +      },
        +      "created": {
        +        "type": "string"
        +      },
        +      "draft": {
        +        "type": "boolean"
        +      },
        +      "head": {
        +        "type": "string"
        +      },
        +      "interactions": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          {
        +            "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        +            "type": "string"
        +          }
        +        ]
        +      },
        +      "involves": {
        +        "type": "string"
        +      },
        +      "label": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        ]
        +      },
        +      "limit": {
        +        "default": 5,
        +        "maximum": 10,
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "mainResearchGoal": {
        +        "type": "string"
        +      },
        +      "match": {
        +        "items": {
        +          "enum": [
        +            "title",
        +            "body",
        +            "comments"
        +          ],
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "mentions": {
        +        "type": "string"
        +      },
        +      "merged": {
        +        "type": "boolean"
        +      },
        +      "merged-at": {
        +        "type": "string"
        +      },
        +      "no-assignee": {
        +        "type": "boolean"
        +      },
        +      "no-label": {
        +        "type": "boolean"
        +      },
        +      "no-milestone": {
        +        "type": "boolean"
        +      },
        +      "no-project": {
        +        "type": "boolean"
        +      },
        +      "order": {
        +        "default": "desc",
        +        "enum": [
        +          "asc",
        +          "desc"
        +        ],
        +        "type": "string"
        +      },
        +      "owner": {
        +        "type": "string"
        +      },
        +      "page": {
        +        "default": 1,
        +        "maximum": 10,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "partialContentMetadata": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "additions": {
        +              "items": {
        +                "type": "number"
        +              },
        +              "type": "array"
        +            },
        +            "deletions": {
        +              "items": {
        +                "type": "number"
        +              },
        +              "type": "array"
        +            },
        +            "file": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "file"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "prNumber": {
        +        "exclusiveMinimum": 0,
        +        "type": "integer"
        +      },
        +      "query": {
        +        "type": "string"
        +      },
        +      "reactions": {
        +        "anyOf": [
        +          {
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          {
        +            "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        +            "type": "string"
        +          }
        +        ]
        +      },
        +      "reasoning": {
        +        "type": "string"
        +      },
        +      "repo": {
        +        "type": "string"
        +      },
        +      "researchGoal": {
        +        "type": "string"
        +      },
        +      "review-requested": {
        +        "type": "string"
        +      },
        +      "reviewed-by": {
        +        "type": "string"
        +      },
        +      "sort": {
        +        "enum": [
        +          "created",
        +          "updated",
        +          "best-match"
        +        ],
        +        "type": "string"
        +      },
        +      "state": {
        +        "enum": [
        +          "open",
        +          "closed"
        +        ],
        +        "type": "string"
        +      },
        +      "type": {
        +        "default": "metadata",
        +        "enum": [
        +          "metadata",
        +          "fullContent",
        +          "partialContent"
        +        ],
        +        "type": "string"
        +      },
        +      "updated": {
        +        "type": "string"
        +      },
        +      "withComments": {
        +        "default": false,
        +        "type": "boolean"
        +      },
        +      "withCommits": {
        +        "default": false,
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "mainResearchGoal",
        +      "researchGoal",
        +      "reasoning"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 3,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • removedInput schema / properties / query
        Removed value: -{
        -  "description": "Search query for PR content (keep minimal for broader results)",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • removedInput schema / properties / reactions
        Removed value: -{
        -  "description": "Filter by number of reactions",
        -  "type": "number"
        -}
      • removedInput schema / properties / repo
        Removed value: -{
        -  "description": "Repository name (use with owner param)",
        -  "type": "string"
        -}
      • removedInput schema / properties / review
        Removed value: -{
        -  "description": "Filter by review status",
        -  "enum": [
        -    "none",
        -    "required",
        -    "approved",
        -    "changes_requested"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / review-requested
        Removed value: -{
        -  "description": "User/team requested for review",
        -  "type": "string"
        -}
      • removedInput schema / properties / reviewed-by
        Removed value: -{
        -  "description": "User who reviewed the PR",
        -  "type": "string"
        -}
      • removedInput schema / properties / sort
        Removed value: -{
        -  "description": "Sort fetched results",
        -  "enum": [
        -    "comments",
        -    "reactions",
        -    "reactions-+1",
        -    "reactions--1",
        -    "reactions-smile",
        -    "reactions-thinking_face",
        -    "reactions-heart",
        -    "reactions-tada",
        -    "interactions",
        -    "created",
        -    "updated"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / state
        Removed value: -{
        -  "description": "Filter by state: open or closed",
        -  "enum": [
        -    "open",
        -    "closed"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / team-mentions
        Removed value: -{
        -  "description": "Filter by team mentions",
        -  "type": "string"
        -}
      • removedInput schema / properties / updated
        Removed value: -{
        -  "description": "Filter by updated date (e.g., >2020-01-01)",
        -  "type": "string"
        -}
      • removedInput schema / properties / visibility
        Removed value: -{
        -  "description": "Repository visibility",
        -  "enum": [
        -    "public",
        -    "private",
        -    "internal"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "query"
        -]New value: +[
        +  "queries"
        +]
    • ChangedgithubSearchRepositories54 fields changed
      • changedInput schema / properties / queries / description
        Previous value: -"Array of up to 5 different search queries for parallel execution"New value: +"Research queries for githubSearchRepositories (1-3 queries per call for optimal resource management). Review schema before use for optimal results"
      • removedInput schema / properties / queries / items / properties / archived
        Removed value: -{
        -  "description": "Archive status filter. false (active repos only), true (archived repos only).",
        -  "type": [
        -    "boolean",
        -    "null"
        -  ]
        -}
      • removedInput schema / properties / queries / items / properties / created / anyOf
        Removed value: -[
        -  {
        -    "pattern": "^(>=?\\d{4}-\\d{2}-\\d{2}|<=?\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}\\.\\.\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2})$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / created / description
        Removed value: -"Repository creation date filter. Format: \">2020-01-01\" (after), \">=2020-01-01\" (on or after), \"<2023-12-31\" (before), \"<=2023-12-31\" (on or before), \"2020-01-01..2023-12-31\" (range), \"2023-01-01\" (exact)."
      • addedInput schema / properties / queries / items / properties / created / type
        Added value: +"string"
      • removedInput schema / properties / queries / items / properties / exactQuery
        Removed value: -{
        -  "description": "Single exact phrase/word search",
        -  "type": "string"
        -}
      • removedInput schema / properties / queries / items / properties / fallbackParams
        Removed value: -{
        -  "additionalProperties": {},
        -  "description": "Fallback parameters if original query returns no results, overrides the original query and try again",
        -  "type": "object"
        -}
      • removedInput schema / properties / queries / items / properties / followers
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    {
        -      "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Repository owner followers count. Format: \">1000\" (popular developers), \">=500\" (established developers), \"<100\" (smaller developers), \"100..1000\" (range)."
        -}
      • removedInput schema / properties / queries / items / properties / forks
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    {
        -      "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Fork count filter. Format: \">N\" (more than), \"<N\" (less than), \"N..M\" (range)."
        -}
      • removedInput schema / properties / queries / items / properties / good-first-issues
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    {
        -      "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Good first issues count. Format: \">5\" (many beginner issues), \"1..10\" (some beginner issues)."
        -}
      • removedInput schema / properties / queries / items / properties / help-wanted-issues
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    {
        -      "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Help wanted issues count. Format: \">10\" (many help wanted), \"1..5\" (some help wanted)."
        -}
      • removedInput schema / properties / queries / items / properties / id
        Removed value: -{
        -  "description": "Optional identifier for the query",
        -  "type": "string"
        -}
      • removedInput schema / properties / queries / items / properties / include-forks
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "enum": [
        -        "false",
        -        "true",
        -        "only"
        -      ],
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Fork inclusion. \"false\" (exclude forks), \"true\" (include forks), \"only\" (forks only)."
        -}
      • addedInput schema / properties / queries / items / properties / keywordsToSearch
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / queries / items / properties / language
        Removed value: -{
        -  "description": "Programming language filter. Filters repositories by primary language.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedInput schema / properties / queries / items / properties / license
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "License filter. Filter repositories by license type."
        -}
      • removedInput schema / properties / queries / items / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / queries / items / properties / limit / default
        Added value: +10
      • removedInput schema / properties / queries / items / properties / limit / description
        Removed value: -"Maximum number of repositories to return (1-100)."
      • addedInput schema / properties / queries / items / properties / limit / maximum
        Added value: +100
      • addedInput schema / properties / queries / items / properties / limit / minimum
        Added value: +1
      • addedInput schema / properties / queries / items / properties / limit / type
        Added value: +"integer"
      • addedInput schema / properties / queries / items / properties / mainResearchGoal
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / match / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "description",
        -      "readme"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "enum": [
        -        "name",
        -        "description",
        -        "readme"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / match / description
        Removed value: -"Search scope. Where to search: name, description, or readme content."
      • addedInput schema / properties / queries / items / properties / match / items
        Added value: +{
        +  "enum": [
        +    "name",
        +    "description",
        +    "readme"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / match / type
        Added value: +"array"
      • removedInput schema / properties / queries / items / properties / number-topics
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    {
        -      "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Number of topics filter. Format: \">5\" (many topics), \">=3\" (at least 3), \"<10\" (few topics), \"1..3\" (range), \"5\" (exact)."
        -}
      • removedInput schema / properties / queries / items / properties / order
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "enum": [
        -        "asc",
        -        "desc"
        -      ],
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Sort order direction."
        -}
      • removedInput schema / properties / queries / items / properties / owner / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / owner / description
        Removed value: -"Repository owner/organization name(s). Search within specific organizations or users."
      • addedInput schema / properties / queries / items / properties / owner / type
        Added value: +"string"
      • addedInput schema / properties / queries / items / properties / page
        Added value: +{
        +  "default": 1,
        +  "maximum": 10,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / queries / items / properties / queryTerms
        Removed value: -{
        -  "description": "Multiple search terms for broader coverage",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / queries / items / properties / reasoning
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / queries / items / properties / researchGoal
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / queries / items / properties / size / anyOf
        Removed value: -[
        -  {
        -    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / size / description
        Removed value: -"Repository size filter in KB. Format: \">1000\" (large projects), \">=500\" (medium-large), \"<100\" (small projects), \"<=50\" (tiny), \"100..1000\" (medium range), \"500\" (exact)."
      • addedInput schema / properties / queries / items / properties / size / type
        Added value: +"string"
      • removedInput schema / properties / queries / items / properties / sort / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "forks",
        -      "help-wanted-issues",
        -      "stars",
        -      "updated",
        -      "best-match"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / sort / description
        Removed value: -"Sort criteria."
      • addedInput schema / properties / queries / items / properties / sort / enum
        Added value: +[
        +  "forks",
        +  "stars",
        +  "updated",
        +  "best-match"
        +]
      • addedInput schema / properties / queries / items / properties / sort / type
        Added value: +"string"
      • removedInput schema / properties / queries / items / properties / stars / anyOf
        Removed value: -[
        -  {
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "pattern": "^(>=?\\d+|<=?\\d+|\\d+\\.\\.\\d+|\\d+)$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / stars / description
        Removed value: -"Star count filter. Format: \">N\" (more than), \"<N\" (less than), \"N..M\" (range)."
      • addedInput schema / properties / queries / items / properties / stars / type
        Added value: +"string"
      • removedInput schema / properties / queries / items / properties / topic
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Find repositories by technology/subject"
        -}
      • addedInput schema / properties / queries / items / properties / topicsToSearch
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / queries / items / properties / updated / anyOf
        Removed value: -[
        -  {
        -    "pattern": "^(>=?\\d{4}-\\d{2}-\\d{2}|<=?\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}\\.\\.\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2})$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / queries / items / properties / updated / description
        Removed value: -"Last updated date filter. Format: \">2024-01-01\" (recently updated), \">=2024-01-01\" (on or after), \"<2022-01-01\" (not recently updated), \"2023-01-01..2024-12-31\" (range)."
      • addedInput schema / properties / queries / items / properties / updated / type
        Added value: +"string"
      • removedInput schema / properties / queries / items / properties / visibility
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "enum": [
        -        "public",
        -        "private",
        -        "internal"
        -      ],
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Repository visibility."
        -}
      • addedInput schema / properties / queries / items / required
        Added value: +[
        +  "mainResearchGoal",
        +  "researchGoal",
        +  "reasoning"
        +]
      • changedInput schema / properties / queries / maxItems
        Previous value: -5New value: +3
    • ChangedgithubViewRepoStructure9 fields changed
      • removedInput schema / properties / branch
        Removed value: -{
        -  "description": "Branch name. Default branch varies between repositories. Tool will automatically try default branch if specified branch is not found, but it is more efficient to verify the correct branch first.",
        -  "maxLength": 255,
        -  "minLength": 1,
        -  "pattern": "^[^\\s]+$",
        -  "type": "string"
        -}
      • removedInput schema / properties / depth
        Removed value: -{
        -  "default": 2,
        -  "description": "Depth of directory structure to explore. Default is 2. Maximum is 4 to prevent excessive API calls and maintain performance.",
        -  "maximum": 4,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • removedInput schema / properties / includeIgnored
        Removed value: -{
        -  "default": false,
        -  "description": "If true, shows all files and folders including configuration files, lock files, hidden directories, etc. Default is false to show only relevant code files and directories. for optimization",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / owner
        Removed value: -{
        -  "description": "Repository owner/organization name (e.g., \"facebook\", \"microsoft\"). Do NOT include repository name.",
        -  "maxLength": 100,
        -  "minLength": 1,
        -  "pattern": "^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$",
        -  "type": "string"
        -}
      • removedInput schema / properties / path
        Removed value: -{
        -  "default": "",
        -  "description": "Directory path within repository. Start with empty path to see actual repository structure first. Do not assume repository structure or nested paths exist. Do not start with slash. Verify path exists before using specific directories.",
        -  "type": "string"
        -}
      • addedInput schema / properties / queries
        Added value: +{
        +  "description": "Research queries for githubViewRepoStructure (1-3 queries per call for optimal resource management). Review schema before use for optimal results",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "branch": {
        +        "maxLength": 255,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "depth": {
        +        "default": 1,
        +        "maximum": 2,
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "entriesPerPage": {
        +        "default": 50,
        +        "maximum": 200,
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "entryPageNumber": {
        +        "default": 1,
        +        "minimum": 1,
        +        "type": "number"
        +      },
        +      "mainResearchGoal": {
        +        "type": "string"
        +      },
        +      "owner": {
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "path": {
        +        "default": "",
        +        "type": "string"
        +      },
        +      "reasoning": {
        +        "type": "string"
        +      },
        +      "repo": {
        +        "maxLength": 150,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "researchGoal": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "mainResearchGoal",
        +      "researchGoal",
        +      "reasoning",
        +      "owner",
        +      "repo",
        +      "branch"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 3,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • removedInput schema / properties / repo
        Removed value: -{
        -  "description": "Repository name under a organization. ",
        -  "maxLength": 100,
        -  "minLength": 1,
        -  "pattern": "^[a-zA-Z0-9._-]+$",
        -  "type": "string"
        -}
      • removedInput schema / properties / showMedia
        Removed value: -{
        -  "default": false,
        -  "description": "If true, shows media files (images, videos, audio, documents). Default is false to hide media files and focus on code structure.",
        -  "type": "boolean"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "owner",
        -  "repo",
        -  "branch"
        -]New value: +[
        +  "queries"
        +]
    • RemovednpmViewPackage
    • ChangedpackageSearch7 fields changed
      • removedInput schema / properties / npmPackageName
        Removed value: -{
        -  "description": "NPM package name to search for. Use this for searching NPM packages.",
        -  "type": "string"
        -}
      • removedInput schema / properties / npmPackagesNames
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    }
        -  ],
        -  "description": "Search terms for NPM packages only - supports multiple queries (e.g., \"react hooks\", [\"typescript\", \"eslint\"], \"data visualization\"). Optional when using other parameters."
        -}
      • removedInput schema / properties / npmSearchStrategy
        Removed value: -{
        -  "default": "individual",
        -  "description": "NPM search strategy: \"individual\" runs separate searches for each term, \"combined\" searches all terms together. Default: individual",
        -  "enum": [
        -    "individual",
        -    "combined"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / pythonPackageName
        Removed value: -{
        -  "description": "Python package name to search for. Use this for searching Python packages on PyPI.",
        -  "type": "string"
        -}
      • addedInput schema / properties / queries
        Added value: +{
        +  "description": "Research queries for packageSearch (1-3 queries per call for optimal resource management). Review schema before use for optimal results",
        +  "items": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "ecosystem": {
        +            "const": "npm",
        +            "type": "string"
        +          },
        +          "mainResearchGoal": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "npmFetchMetadata": {
        +            "default": false,
        +            "type": "boolean"
        +          },
        +          "reasoning": {
        +            "type": "string"
        +          },
        +          "researchGoal": {
        +            "type": "string"
        +          },
        +          "searchLimit": {
        +            "default": 1,
        +            "maximum": 10,
        +            "minimum": 1,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "mainResearchGoal",
        +          "researchGoal",
        +          "reasoning",
        +          "name",
        +          "ecosystem"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "ecosystem": {
        +            "const": "python",
        +            "type": "string"
        +          },
        +          "mainResearchGoal": {
        +            "$ref": "#/properties/queries/items/anyOf/0/properties/mainResearchGoal"
        +          },
        +          "name": {
        +            "$ref": "#/properties/queries/items/anyOf/0/properties/name"
        +          },
        +          "pythonFetchMetadata": {
        +            "default": false,
        +            "type": "boolean"
        +          },
        +          "reasoning": {
        +            "$ref": "#/properties/queries/items/anyOf/0/properties/reasoning"
        +          },
        +          "researchGoal": {
        +            "$ref": "#/properties/queries/items/anyOf/0/properties/researchGoal"
        +          },
        +          "searchLimit": {
        +            "$ref": "#/properties/queries/items/anyOf/0/properties/searchLimit"
        +          }
        +        },
        +        "required": [
        +          "mainResearchGoal",
        +          "researchGoal",
        +          "reasoning",
        +          "name",
        +          "ecosystem"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  "maxItems": 3,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • removedInput schema / properties / searchLimit
        Removed value: -{
        -  "default": 20,
        -  "description": "Results limit per query (1-50). Default: 20",
        -  "maximum": 50,
        -  "minimum": 1,
        -  "type": "integer"
        -}
      • addedInput schema / required
        Added value: +[
        +  "queries"
        +]
  3. 10 tool updates
    • First observedapiStatusCheck
    • First observedgithubGetFileContent
    • First observedgithubSearchCode
    • First observedgithubSearchCommits
    • First observedgithubSearchIssues
    • First observedgithubSearchPullRequests
    • First observedgithubSearchRepositories
    • First observedgithubViewRepoStructure
    • First observednpmViewPackage
    • First observedpackageSearch

TDQS

A4.7/5.0
Disambiguation5/5

Each tool targets a distinct operation: GitHub tools for remote repo actions (get file, search code, search PRs, search repos, view structure), local tools for filesystem actions (find files, get file content, search code, view structure), LSP tools for semantic analysis (goto definition, find references, call hierarchy), and a separate package search tool. There is no overlap in purpose.

Naming Consistency5/5

All tool names follow a consistent camelCase pattern with a prefix indicating domain (github, local, lsp) followed by a verb-noun combination (e.g., githubGetFileContent, localSearchCode, lspGotoDefinition). The naming is predictable and intuitive.

Tool Count5/5

13 tools is well-scoped for a server that combines GitHub API exploration (5 tools), local filesystem analysis (4 tools), LSP-based code navigation (3 tools), and package search (1 tool). Each tool serves a clear purpose and contributes to the overall functionality without bloat.

Completeness5/5

The tool set covers the complete lifecycle for code exploration and analysis: discovery (search repos, view structure, find files), content access (get file content, search code), semantic navigation (goto definition, find references, call hierarchy), and package lookup. There are no obvious gaps for the server's stated purpose.

Maintenance

ActivityActive
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    A free, open-source service that transforms GitHub projects into MCP endpoints, enabling AI assistants to access and understand project documentation without any setup.
    32
    98
    8,364
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables semantic code search across multiple repositories using natural language queries. Provides intelligent code discovery, symbol lookups, and cross-repo dependency analysis for AI coding agents.
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Provides code repository indexing and semantic search capabilities, allowing natural language queries to find relevant code snippets with automatic incremental indexing and multi-language support.
    1
    19
    360
    ISC
  • A
    license
    A
    quality
    A
    maintenance
    A local-first codebase intelligence tool that enables AI assistants to research codebases using semantic search, multi-hop relationship discovery, and structural parsing. It allows users to extract architectural patterns and institutional knowledge across 30+ programming languages through an MCP-compatible interface.
    2
    1,428
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bgauryy/octocode'

If you have feedback or need assistance with the MCP directory API, please join our Discord server