Skip to main content
Glama
lin2000wl

Serena MCP Server

by lin2000wl
  • :rocket: Serena is a powerful coding agent toolkit capable of turning an LLM into a fully-featured agent that works directly on your codebase.

  • :wrench: Serena provides essential semantic code retrieval and editing tools that are akin to an IDE's capabilities, extracting code entities at the symbol level and exploiting relational structure.

  • :free: Serena is free & open-source, enhancing the capabilities of LLMs you already have access to free of charge.

Demonstration

Here is a demonstration of Serena implementing a small feature for itself (a better log GUI) with Claude Desktop. Note how Serena's tools enable Claude to find and edit the right symbols.

https://github.com/user-attachments/assets/6eaa9aa1-610d-4723-a2d6-bf1e487ba753

LLM Integration

Serena provides the necessary tools for coding workflows, but an LLM is required to do the actual work, orchestrating tool use.

For example, supercharge the performance of Claude Code with a one-line shell command.

Serena can be integrated with an LLM in several ways:

  • by using the model context protocol (MCP).
    Serena provides an MCP server which integrates with

    • Claude Code and Claude Desktop,

    • IDEs like VSCode, Cursor or IntelliJ,

    • Extensions like Cline or Roo Code

    • and many others, including the ChatGPT app soon

  • by using Agno – the model-agnostic agent framework.
    Serena's Agno-based agent allows you to turn virtually any LLM into a coding agent, whether it's provided by Google, OpenAI or Anthropic (with a paid API key) or a free model provided by Ollama, Together or Anyscale.

  • by incorporating Serena's tools into an agent framework of your choice.
    Serena's tool implementation is decoupled from the framework-specific code and can thus easily be adapted to any agent framework.

Programming Language Support & Semantic Analysis Capabilities

Serena's semantic code analysis capabilities build on language servers using the widely implemented language server protocol (LSP). The LSP provides a set of versatile code querying and editing functionalities based on symbolic understanding of the code. Equipped with these capabilities, Serena discovers and edits code just like a seasoned developer making use of an IDE's capabilities would. Serena can efficiently find the right context and do the right thing even in very large and complex projects! So not only is it free and open-source, it frequently achieves better results than existing solutions that charge a premium.

Language servers provide support for a wide range of programming languages. With Serena, we provide

  • direct, out-of-the-box support for:

    • Python

    • TypeScript/Javascript (currently has some instability issues, we are working on it)

    • PHP

    • Go (need to install go and gopls first)

    • Rust

    • C# (requires dotnet to be installed. We switched the underlying language server recently, please report any issues you encounter)

    • Java (Note: startup is slow, initial startup especially so. There may be issues with java on macos and linux, we are working on it.)

    • Clojure

    • C/C++ (You may experience issues with finding references, we are working on it)

  • indirect support (may require some code changes/manual installation) for:

    • Ruby (untested)

    • Kotlin (untested)

    • Dart (untested)

    These languages are supported by the language server library, but we did not explicitly test whether the support for these languages actually works flawlessly.

Further languages can, in principle, easily be supported by providing a shallow adapter for a new language server implementation.

Table of Contents

Related MCP server: Files-DB-MCP

What Can I Use Serena For?

You can use Serena for any coding tasks – whether it is focussed on analysis, planning, designing new components or refactoring existing ones. Since Serena's tools allow an LLM to close the cognitive perception-action loop, agents based on Serena can autonomously carry out coding tasks from start to finish – from the initial analysis to the implementation, testing and, finally, the version control system commit.

Serena can read, write and execute code, read logs and the terminal output. While we do not necessarily encourage it, "vibe coding" is certainly possible, and if you want to almost feel like "the code no longer exists", you may find Serena even more adequate for vibing than an agent inside an IDE (since you will have a separate GUI that really lets you forget).

Free Coding Agents with Serena

Even the free tier of Anthropic's Claude has support for MCP Servers, so you can use Serena with Claude for free. Presumably, the same will soon be possible with ChatGPT Desktop once support for MCP servers is added.
Through Agno, you furthermore have the option to use Serena with a free/open-weights model.

Serena is Oraios AI's contribution to the developer community.
We use it ourselves on a regular basis.

We got tired of having to pay multiple IDE-based subscriptions (such as Windsurf or Cursor) that forced us to keep purchasing tokens on top of the chat subscription costs we already had. The substantial API costs incurred by tools like Claude Code, Cline, Aider and other API-based tools are similarly unattractive. We thus built Serena with the prospect of being able to cancel most other subscriptions.

Quick Start

Serena can be used in various ways, below you will find instructions for selected integrations.

  • If you just want to turn Claude into a free-to-use coding agent, we recommend using Serena through Claude Code or Claude Desktop.

  • If you want to use Gemini or any other model, and you want a GUI experience, you can use Agno or one of the many other GUIs that support MCP servers.

  • If you want to use Serena integrated in your IDE, see the section on other MCP clients or the dedicated Cursor deployment guide.

Serena is managed by uv, so you will need to install it).

Running the Serena MCP Server

You have several options for running the MCP server, which are explained in the subsections below.

Usage

The typical usage involves the client (Claude Code, Claude Desktop, etc.) running the MCP server as a subprocess (using stdio communication), so the client needs to be provided with the command to run the MCP server. (Alternatively, you can run the MCP server in SSE mode and tell your client how to connect to it.)

Note that no matter how you run the MCP server, Serena will, by default, start a small web-based dashboard on localhost that will display logs and allow shutting down the MCP server (since many clients fail to clean up processes correctly). This and other settings can be adjusted in the configuration and/or by providing command-line arguments.

Local Installation
  1. Clone the repository and change into it.

    git clone https://github.com/oraios/serena
    cd serena
  2. Optionally create a config file from the template and adjust it according to your preferences.

    cp src/serena/resources/serena_config.template.yml serena_config.yml

    If you just want the default config, you can skip this part, and a config file will be created when you first run Serena.

  3. Run the server with uv:

    uv run serena-mcp-server

    When running from outside the serena installation directory, be sure to pass it, i.e. use

     uv run --directory /abs/path/to/serena serena-mcp-server
Using uvx

uvx can be used to run the latest version of Serena directly from the repository, without an explicit local installation.

  • Windows:

    uvx --from git+https://github.com/oraios/serena serena-mcp-server.exe
  • Other operating systems:

    uvx --from git+https://github.com/oraios/serena serena-mcp-server
Using Docker (Experimental)

⚠️ Docker support is currently experimental with several limitations. Please read the Docker documentation for important caveats before using it.

You can run the Serena MCP server directly via docker as follows, assuming that the projects you want to work on are all located in /path/to/your/projects:

docker run --rm -i --network host -v /path/to/your/projects:/workspaces/projects ghcr.io/oraios/serena:latest serena-mcp-server --transport stdio

Replace /path/to/your/projects with the absolute path to your projects directory. The Docker approach provides:

  • Better security isolation for shell command execution

  • No need to install language servers and dependencies locally

  • Consistent environment across different systems

See the Docker documentation for detailed setup instructions, configuration options, and known limitations.

SSE Mode

ℹ️ Note that MCP servers which use stdio as a protocol are somewhat unusual as far as client/server architectures go, as the server necessarily has to be started by the client in order for communication to take place via the server's standard input/output stream. In other words, you do not need to start the server yourself. The client application (e.g. Claude Desktop) takes care of this and therefore needs to be configured with a launch command.

When using instead the SSE mode, which uses HTTP-based communication, you control the server lifecycle yourself, i.e. you start the server and provide the client with the URL to connect to it.

Simply provide serena-mcp-server with the --transport sse option and optionally provide the port. For example, to run the Serena MCP server in SSE mode on port 9121 using a local installation, you would run this command from the Serena directory,

uv run serena-mcp-server --transport sse --port 9121

and then configure your client to connect to http://localhost/sse:9121.

Command-Line Arguments

The Serena MCP server supports a wide range of additional command-line options, including the option to run in SSE mode and to adapt Serena to various contexts and modes of operation.

Run with parameter --help to get a list of available options.

Configuration

Serena's behavior (active tools and prompts as well as logging configuration, etc.) is configured in four places:

  1. The serena_config.yml for general settings that apply to all clients and projects

  2. In the arguments passed to the serena-mcp-server in your client's config (see below), which will apply to all sessions started by the respective client. In particular, the context parameter should be set appropriately for Serena to be best adjusted to existing tools and capabilities of your client. See for a detailed explanation. You can override all entries from the serena_config.yml through command line arguments.

  3. In the .serena/project.yml file within your project. This will hold project-level configuration that is used whenever that project is activated.

  4. Through the currently active set of modes.

⚠️ Note: Serena is under active development. We are continuously adding features, improving stability and the UX. As a result, configuration may change in a breaking manner. If you have an invalid configuration, the MCP server or Serena-based Agent may fail to start (investigate the MCP logs in the former case). Check the changelog and the configuration templates when updating Serena, adapting your configurations accordingly.

After the initial setup, continue with one of the sections below, depending on how you want to use Serena.

You can just ask the LLM to show you the config of your session, Serena has a tool for it.

Project Activation & Indexing

The recommended way is to just ask the LLM to activate a project by providing it an absolute path to, or, in case the project was activated in the past, by its name. The default project name is the directory name.

  • "Activate the project /path/to/my_project"

  • "Activate the project my_project"

All projects that have been activated will be automatically added to your serena_config.yml, and for each project, the file .serena/project.yml will be generated. You can adjust the latter, e.g., by changing the name (which you refer to during the activation) or other options. Make sure to not have two different projects with the same name.

If you are mostly working with the same project, you can also configure to always activate a project at startup by passing --project <path_or_name> to the serena-mcp-server command in your client's MCP config.

ℹ️ For larger projects, we recommend that you index your project to accelerate Serena's tools; otherwise the first tool application may be very slow. To do so, run one of these commands the project directory or pass the path to the project as an argument:

  • When using a local installation:

    uv run --directory /abs/path/to/serena index-project
  • When using uvx:

    uvx --from git+https://github.com/oraios/serena index-project

Claude Code

Serena is a great way to make Claude Code both cheaper and more powerful!

From your project directory, add serena with a command like this,

claude mcp add serena -- <serena-mcp-server> --context ide-assistant --project $(pwd)

where <serena-mcp-server> is your way of running the Serena MCP server. For example, when using uvx, you would run

claude mcp add serena -- uvx --from git+https://github.com/oraios/serena serena-mcp-server --context ide-assistant --project $(pwd)

ℹ️ Once in Claude Code, you should ask Claude to "Read the initial instructions" as your first prompt, such that it will receive information on how to use Serena's tools.

Claude Desktop

For Claude Desktop (available for Windows and macOS), go to File / Settings / Developer / MCP Servers / Edit Config, which will let you open the JSON file claude_desktop_config.json. Add the serena MCP server configuration, using a run command depending on your setup.

  • local installation:

    {
        "mcpServers": {
            "serena": {
                "command": "/abs/path/to/uv",
                "args": ["run", "--directory", "/abs/path/to/serena", "serena-mcp-server"]
            }
        }
    }
  • uvx:

    {
        "mcpServers": {
            "serena": {
                "command": "/abs/path/to/uvx",
                "args": ["--from", "git+https://github.com/oraios/serena", "serena-mcp-server"]
            }
        }
    }
  • docker:

     {
         "mcpServers": {
             "serena": {
                 "command": "docker",
                 "args": ["run", "--rm", "-i", "--network", "host", "-v", "/path/to/your/projects:/workspaces/projects", "ghcr.io/oraios/serena:latest", "serena-mcp-server", "--transport", "stdio"]
             }
         }
     }

If you are using paths containing backslashes for paths on Windows (note that you can also just use forward slashes), be sure to escape them correctly (\\).

That's it! Save the config and then restart Claude Desktop. You are ready for activating your first project.

ℹ️ You can further customize the run command using additional arguments (see above).

Note: on Windows and macOS there are official Claude Desktop applications by Anthropic, for Linux there is an open-source community version.

⚠️ Be sure to fully quit the Claude Desktop application, as closing Claude will just minimize it to the system tray – at least on Windows.

⚠️ Some clients, currently including Claude Desktop, may leave behind zombie processes. You will have to find and terminate them manually then. With Serena, you can activate the dashboard to prevent unnoted processes and also use the dashboard for shutting down Serena.

After restarting, you should see Serena's tools in your chat interface (notice the small hammer icon).

For more information on MCP servers with Claude Desktop, see the official quick start guide.

Other MCP Clients (Cline, Roo-Code, Cursor, Windsurf, etc.)

Being an MCP Server, Serena can be included in any MCP Client. The same configuration as above, perhaps with small client-specific modifications, should work. Most of the popular existing coding assistants (IDE extensions or VSCode-like IDEs) support connections to MCP Servers. It is recommended to use the ide-assistant context for these integrations by adding "--context", "ide-assistant" to the args in your MCP client's configuration. Including Serena generally boosts their performance by providing them tools for symbolic operations.

In this case, the billing for the usage continues to be controlled by the client of your choice (unlike with the Claude Desktop client). But you may still want to use Serena through such an approach, e.g., for one of the following reasons:

  1. You are already using a coding assistant (say Cline or Cursor) and just want to make it more powerful.

  2. You are on Linux and don't want to use the community-created Claude Desktop.

  3. You want tighter integration of Serena into your IDE and don't mind paying for that.

Cursor全局MCP部署指南

Cursor 是一个基于VS Code的AI编程IDE,支持全局MCP服务器配置。以下是将Serena部署为Cursor全局MCP服务器的详细步骤:

前置要求

在开始配置之前,请确保安装TypeScript语言服务器以解决中文兼容性问题:

npm install -g typescript-language-server typescript

这个安装步骤非常重要,因为它能够解决Serena在处理包含中文字符的项目时可能遇到的兼容性问题。

配置步骤

  1. 打开Cursor设置

    • 在Cursor中按 Ctrl+Shift+P (Windows/Linux) 或 Cmd+Shift+P (macOS)

    • 输入并选择 "Preferences: Open Settings (JSON)"

  2. 添加MCP服务器配置

    在settings.json文件中添加以下配置:

    本地安装方式:

    {
      "mcp.servers": {
        "serena": {
          "command": "/absolute/path/to/uv",
          "args": [
            "run", 
            "--directory", 
            "/absolute/path/to/serena", 
            "serena-mcp-server",
            "--context",
            "ide-assistant"
          ],
          "env": {}
        }
      }
    }

    使用Python+uv方式(推荐):

{
  "mcp.servers": {
    "serena": {
      "command": "py",
      "args": [
        "-3.11", "-m", "uv", "run",
        "--directory", "H:\AI\Serena\serena-main",
        "serena-mcp-server",
        "--context", "ide-assistant",
        "--mode", "interactive",
        "--mode", "editing"
      ],
      "env": {
        "UV_INDEX_URL": "https://mirrors.aliyun.com/pypi/simple/"
      }
    }
  }
}

这种方式的优势:

  • 使用指定的Python版本(3.11)

  • 通过阿里云镜像加速包安装

  • 配置简单,无需绝对路径到uv

  • 同时启用交互和编辑模式

  • 适合中国用户的网络环境

使用uvx方式:

{
  "mcp.servers": {
    "serena": {
      "command": "/absolute/path/to/uvx",
      "args": [
        "--from", 
        "git+https://github.com/oraios/serena", 
        "serena-mcp-server",
        "--context",
        "ide-assistant"
      ],
      "env": {}
    }
  }
}

Docker方式:

{
  "mcp.servers": {
    "serena": {
      "command": "docker",
      "args": [
        "run", 
        "--rm", 
        "-i", 
        "--network", 
        "host", 
        "-v", 
        "/path/to/your/projects:/workspaces/projects", 
        "ghcr.io/oraios/serena:latest", 
        "serena-mcp-server", 
        "--transport", 
        "stdio",
        "--context",
        "ide-assistant"
      ],
      "env": {}
    }
  }
}
  1. Windows路径注意事项

    在Windows系统上,请确保正确转义路径中的反斜杠:

    {
      "mcp.servers": {
        "serena": {
          "command": "C:\Users\YourName\AppData\Local\Programs\uv\uv.exe",
          "args": [
            "run", 
            "--directory", 
            "C:\path\to\serena", 
            "serena-mcp-server",
            "--context",
            "ide-assistant"
          ]
        }
      }
    }
  2. 保存并重启Cursor

    保存settings.json文件后,重启Cursor以使配置生效。

验证安装

  1. 重启Cursor后,打开任意项目

  2. 在聊天界面中,您应该能看到Serena的工具(通常显示为小锤子图标)

  3. 发送消息 "Read the initial instructions" 来获取Serena的使用指南

  4. 使用 "Activate the project /path/to/your/project" 来激活项目

中文兼容性优化

通过预先安装TypeScript语言服务器,Serena能够更好地处理:

  • 包含中文注释的代码文件

  • 中文文件名和目录名

  • 中文字符串常量

  • 混合中英文的项目结构

故障排除

如果遇到问题,请检查:

  1. 路径正确性:确保所有路径都是绝对路径

  2. 权限问题:确保Cursor有权限执行指定的命令

  3. 依赖安装:验证uv、uvx或Docker是否正确安装

  4. TypeScript语言服务器:确认已全局安装typescript-language-server

  5. 日志查看:查看Cursor的开发者控制台以获取详细错误信息

高级配置选项

您可以通过添加更多参数来自定义Serena的行为:

{
  "mcp.servers": {
    "serena": {
      "command": "py",
      "args": [
        "-3.11", "-m", "uv", "run",
        "--directory", "H:\AI\Serena\serena-main",
        "serena-mcp-server",
        "--context", "ide-assistant",
        "--mode", "editing",
        "--mode", "interactive",
        "--project", "/default/project/path"
      ],
      "env": {
        "UV_INDEX_URL": "https://mirrors.aliyun.com/pypi/simple/",
        "SERENA_LOG_LEVEL": "INFO"
      }
    }
  }
}

通过这种配置,Serena将作为全局MCP服务器在Cursor中运行,为您的所有项目提供强大的AI辅助编程能力。

Agno Agent

Agno is a model-agnostic agent framework that allows you to turn Serena into an agent (independent of the MCP technology) with a large number of underlying LLMs. Agno is currently the simplest way of running Serena in a chat GUI with an LLM of your choice.

While Agno is not yet entirely stable, we chose it, because it comes with its own open-source UI, making it easy to directly use the agent using a chat interface. With Agno, Serena is turned into an agent (so no longer an MCP Server), so it can be used in programmatic ways (for example for benchmarking or within your application).

Here's how it works (see also Agno's documentation):

  1. Download the agent-ui code with npx

    npx create-agent-ui@latest

    or, alternatively, clone it manually:

    git clone https://github.com/agno-agi/agent-ui.git
    cd agent-ui 
    pnpm install 
    pnpm dev
  2. Install serena with the optional requirements:

    # You can also only select agno,google or agno,anthropic instead of all-extras
    uv pip install --all-extras -r pyproject.toml -e .
  3. Copy .env.example to .env and fill in the API keys for the provider(s) you intend to use.

  4. Start the agno agent app with

    uv run python scripts/agno_agent.py

    By default, the script uses Claude as the model, but you can choose any model supported by Agno (which is essentially any existing model).

  5. In a new terminal, start the agno UI with

    cd agent-ui 
    pnpm dev

    Connect the UI to the agent you started above and start chatting. You will have the same tools as in the MCP server version.

Here is a short demo of Serena performing a small analysis task with the newest Gemini model:

https://github.com/user-attachments/assets/ccfcb968-277d-4ca9-af7f-b84578858c62

⚠️ IMPORTANT: In contrast to the MCP server approach, tool execution in the Agno UI does not ask for the user's permission. The shell tool is particularly critical, as it can perform arbitrary code execution. While we have never encountered any issues with this in our testing with Claude, allowing this may not be entirely safe. You may choose to disable certain tools for your setup in your Serena project's configuration file (.yml).

Other Agent Frameworks

It should be straightforward to incorporate Serena into any agent framework (like pydantic-ai, langgraph or others). Typically, you need only to write an adapter for Serena's tools to the tool representation in the framework of your choice, as was done by us for Agno with SerenaAgnoToolkit.

Detailed Usage and Recommendations

Tool Execution

Serena combines tools for semantic code retrieval with editing capabilities and shell execution. Serena's behavior can be further customized through Modes and Contexts. Find the complete list of tools below.

The use of all tools is generally recommended, as this allows Serena to provide the most value: Only by executing shell commands (in particular, tests) can Serena identify and correct mistakes autonomously.

Shell Execution and Editing Tools

However, it should be noted that the execute_shell_command tool allows for arbitrary code execution. When using Serena as an MCP Server, clients will typically ask the user for permission before executing a tool, so as long as the user inspects execution parameters beforehand, this should not be a problem. However, if you have concerns, you can choose to disable certain commands in your project's .yml configuration file. If you only want to use Serena purely for analyzing code and suggesting implementations without modifying the codebase, you can enable read-only mode by setting read_only: true in your project configuration file. This will automatically disable all editing tools and prevent any modifications to your codebase while still allowing all analysis and exploration capabilities.

In general, be sure to back up your work and use a version control system in order to avoid losing any work.

Modes and Contexts

Serena's behavior and toolset can be adjusted using contexts and modes. These allow for a high degree of customization to best suit your workflow and the environment Serena is operating in.

Contexts

A context defines the general environment in which Serena is operating. It influences the initial system prompt and the set of available tools. A context is set at startup when launching Serena (e.g., via CLI options for an MCP server or in the agent script) and cannot be changed during an active session.

Serena comes with pre-defined contexts:

  • desktop-app: Tailored for use with desktop applications like Claude Desktop. This is the default.

  • agent: Designed for scenarios where Serena acts as a more autonomous agent, for example, when used with Agno.

  • ide-assistant: Optimized for integration into IDEs like VSCode, Cursor, or Cline, focusing on in-editor coding assistance. Choose the context that best matches the type of integration you are using.

When launching Serena, specify the context using --context <context-name>.
Note that for cases where parameter lists are specified (e.g. Claude Desktop), you must add two parameters to the list.

Modes

Modes further refine Serena's behavior for specific types of tasks or interaction styles. Multiple modes can be active simultaneously, allowing you to combine their effects. Modes influence the system prompt and can also alter the set of available tools by excluding certain ones.

Examples of built-in modes include:

  • planning: Focuses Serena on planning and analysis tasks.

  • editing: Optimizes Serena for direct code modification tasks.

  • interactive: Suitable for a conversational, back-and-forth interaction style.

  • one-shot: Configures Serena for tasks that should be completed in a single response, often used with planning for generating reports or initial plans.

  • no-onboarding: Skips the initial onboarding process if it's not needed for a particular session.

  • onboarding: (Usually triggered automatically) Focuses on the project onboarding process.

Modes can be set at startup (similar to contexts) but can also be switched dynamically during a session. You can instruct the LLM to use the switch_modes tool to activate a different set of modes (e.g., "switch to planning and one-shot modes").

When launching Serena, specify modes using --mode <mode-name>; multiple modes can be specified, e.g. --mode planning --mode no-onboarding.

:warning: Mode Compatibility: While you can combine modes, some may be semantically incompatible (e.g., interactive and one-shot). Serena currently does not prevent incompatible combinations; it is up to the user to choose sensible mode configurations.

Customization

You can create your own contexts and modes to precisely tailor Serena to your needs in two ways:

  • Adding to Serena's configuration directory: Create new .yml files in the config/contexts/ or config/modes/ directories within your local Serena repository. These custom contexts/modes will be automatically registered and available for use by their name (filename without the .yml extension). They will also appear in listings of available contexts/modes.

  • Using external YAML files: When starting Serena, you can provide an absolute path to a custom .yml file for a context or mode.

A context or mode YAML file typically defines:

  • name: (Optional if filename is used) The name of the context/mode.

  • prompt: A string that will be incorporated into Serena's system prompt.

  • description: (Optional) A brief description.

  • excluded_tools: A list of tool names (strings) to disable when this context/mode is active.

This customization allows for deep integration and adaptation of Serena to specific project requirements or personal preferences.

Onboarding and Memories

By default, Serena will perform an onboarding process when it is started for the first time for a project. The goal of the onboarding is for Serena to get familiar with the project and to store memories, which it can then draw upon in future interactions. If an LLM should fail to complete the onboarding and does not actually write the respective memories to disk, you may need to ask it to do so explicitly.

The onboarding will usually read a lot of content from the project, thus filling up the context. It can therefore be advisable to switch to another conversation once the onboarding is complete. After the onboarding, we recommend that you have a quick look at the memories and, if necessary, edit them or add additional ones.

Memories are files stored in .serena/memories/ in the project directory, which the agent can choose to read in subsequent interactions. Feel free to read and adjust them as needed; you can also add new ones manually. Every file in the .serena/memories/ directory is a memory file. Whenever Serena starts working on a project, the list of memories is provided, and the agent can decide to read them. We found that memories can significantly improve the user experience with Serena.

Prepare Your Project

Structure Your Codebase

Serena uses the code structure for finding, reading and editing code. This means that it will work well with well-structured code but may perform poorly on fully unstructured one (like a "God class" with enormous, non-modular functions).
Furthermore, for languages that are not statically typed, type annotations are highly beneficial.

Start from a Clean State

It is best to start a code generation task from a clean git state. Not only will this make it easier for you to inspect the changes, but also the model itself will have a chance of seeing what it has changed by calling git diff and thereby correct itself or continue working in a followup conversation if needed.

:warning: Important: since Serena will write to files using the system-native line endings and it might want to look at the git diff, it is important to set git config core.autocrlf to true on Windows. With git config core.autocrlf set to false on Windows, you may end up with huge diffs only due to line endings. It is generally a good idea to globally enable this git setting on Windows:

git config --global core.autocrlf true

Logging, Linting, and Automated Tests

Serena can successfully complete tasks in an agent loop, where it iteratively acquires information, performs actions, and reflects on the results. However, Serena cannot use a debugger; it must rely on the results of program executions, linting results, and test results to assess the correctness of its actions. Therefore, software that is designed to meaningful interpretable outputs (e.g. log messages) and that has a good test coverage is much easier to work with for Serena.

We generally recommend to start an editing task from a state where all linting checks and tests pass.

Prompting Strategies

We found that it is often a good idea to spend some time conceptualizing and planning a task before actually implementing it, especially for non-trivial task. This helps both in achieving better results and in increasing the feeling of control and staying in the loop. You can make a detailed plan in one session, where Serena may read a lot of your code to build up the context, and then continue with the implementation in another (potentially after creating suitable memories).

Potential Issues in Code Editing

In our experience, LLMs are bad at counting, i.e. they have problems inserting blocks of code in the right place. Most editing operations can be performed at the symbolic level, allowing this problem is overcome. However, sometimes, line-level insertions are useful.

Serena is instructed to double-check the line numbers and any code blocks that it will edit, but you may find it useful to explicitly tell it how to edit code if you run into problems.
We are working on making Serena's editing capabilities more robust.

Running Out of Context

For long and complicated tasks, or tasks where Serena has read a lot of content, you may come close to the limits of context tokens. In that case, it is often a good idea to continue in a new conversation. Serena has a dedicated tool to create a summary of the current state of the progress and all relevant info for continuing it. You can request to create this summary and write it to a memory. Then, in a new conversation, you can just ask Serena to read the memory and continue with the task. In our experience, this worked really well. On the up-side, since in a single session there is no summarization involved, Serena does not usually get lost (unlike some other agents that summarize under the hood), and it is also instructed to occasionally check whether it's on the right track.

Moreover, Serena is instructed to be frugal with context (e.g., to not read bodies of code symbols unnecessarily), but we found that Claude is not always very good in being frugal (Gemini seemed better at it). You can explicitly instruct it to not read the bodies if you know that it's not needed.

Combining Serena with Other MCP Servers

When using Serena through an MCP Client, you can use it together with other MCP servers. However, beware of tool name collisions! See info on that above.

Currently, there is a collision with the popular Filesystem MCP Server. Since Serena also provides filesystem operations, there is likely no need to ever enable these two simultaneously.

Serena's Logs: The Dashboard and GUI Tool

Serena provides two convenient ways of accessing the logs of the current session:

  • via the web-based dashboard (enabled by default)

    This is supported on all platforms. By default, it will be accessible at http://localhost:24282/dashboard/index.html, but a higher port may be used if the default port is unavailable/multiple instances are running.

  • via the GUI tool (disabled by default)

    This is mainly supported on Windows, but it may also work on Linux; macOS is unsupported.

Both can be enabled or disabled in Serena's configuration file (serena_config.yml, see above). If enabled, they will automatically be opened as soon as the Serena agent/MCP server is started.

In addition to viewing logs, both tools allow to shut down the Serena agent. This function is provided, because clients like Claude Desktop may fail to terminate the MCP server subprocess when they themselves are closed.

Troubleshooting

Support for MCP Servers in Claude Desktop and the various MCP Server SDKs are relatively new developments and may display instabilities.

The working configuration of an MCP server may vary from platform to platform and from client to client. We recommend always using absolute paths, as relative paths may be sources of errors. The language server is running in a separate sub-process and is called with asyncio – sometimes a client may make it crash. If you have Serena's log window enabled, and it disappears, you'll know what happened.

Some clients may not properly terminate MCP servers, look out for hanging python processes and terminate them manually, if needed.

Comparison with Other Coding Agents

To our knowledge, Serena is the first fully-featured coding agent where the entire functionality is available through an MCP server, thus not requiring API keys or subscriptions.

Subscription-Based Coding Agents

The most prominent subscription-based coding agents are parts of IDEs like Windsurf, Cursor and VSCode. Serena's functionality is similar to Cursor's Agent, Windsurf's Cascade or VSCode's upcoming agent mode.

Serena has the advantage of not requiring a subscription. A potential disadvantage is that it is not directly integrated into an IDE, so the inspection of newly written code is not as seamless.

More technical differences are:

  • Serena is not bound to a specific IDE. Serena's MCP server can be used with any MCP client (including some IDEs), and the Agno-based agent provides additional ways of applying its functionality.

  • Serena is not bound to a specific large language model or API.

  • Serena navigates and edits code using a language server, so it has a symbolic understanding of the code. IDE-based tools often use a RAG-based or purely text-based approach, which is often less powerful, especially for large codebases.

  • Serena is open-source and has a small codebase, so it can be easily extended and modified.

API-Based Coding Agents

An alternative to subscription-based agents are API-based agents like Claude Code, Cline, Aider, Roo Code and others, where the usage costs map directly to the API costs of the underlying LLM. Some of them (like Cline) can even be included in IDEs as an extension. They are often very powerful and their main downside are the (potentially very high) API costs.

Serena itself can be used as an API-based agent (see the section on Agno above). We have not yet written a CLI tool or a dedicated IDE extension for Serena (and there is probably no need for the latter, as Serena can already be used with any IDE that supports MCP servers). If there is demand for a Serena as a CLI tool like Claude Code, we will consider writing one.

The main difference between Serena and other API-based agents is that Serena can also be used as an MCP server, thus not requiring an API key and bypassing the API costs. This is a unique feature of Serena.

Other MCP-Based Coding Agents

There are other MCP servers designed for coding, like DesktopCommander and codemcp. However, to the best of our knowledge, none of them provide semantic code retrieval and editing tools; they rely purely on text-based analysis. It is the integration of language servers and the MCP that makes Serena unique and so powerful for challenging coding tasks, especially in the context of larger codebases.

Acknowledgements

We built Serena on top of multiple existing open-source technologies, the most important ones being:

  1. multilspy. A library which wraps language server implementations and adapts them for interaction via Python and which provided the basis for our library Solid-LSP (src/solidlsp). Solid-LSP provides pure synchronous LSP calls and extends the original library with the symbolic logic that Serena required.

  2. Python MCP SDK

  3. Agno and the associated agent-ui, which we use to allow Serena to work with any model, beyond the ones supporting the MCP.

  4. All the language servers that we use through Solid-LSP.

Without these projects, Serena would not have been possible (or would have been significantly more difficult to build).

Customizing and Extending Serena

It is straightforward to extend Serena's AI functionality with your own ideas. Simply implement a new tool by subclassing serena.agent.Tool and implement the apply method with a signature that matches the tool's requirements. Once implemented, SerenaAgent will automatically have access to the new tool.

It is also relatively straightforward to add support for a new programming language.

We look forward to seeing what the community will come up with! For details on contributing, see here.

Full List of Tools

Here is the full list of Serena's tools with a short description (output of uv run serena-list-tools):

  • activate_project: Activates a project by name.

  • check_onboarding_performed: Checks whether project onboarding was already performed.

  • create_text_file: Creates/overwrites a file in the project directory.

  • delete_lines: Deletes a range of lines within a file.

  • delete_memory: Deletes a memory from Serena's project-specific memory store.

  • execute_shell_command: Executes a shell command.

  • find_referencing_code_snippets: Finds code snippets in which the symbol at the given location is referenced.

  • find_referencing_symbols: Finds symbols that reference the symbol at the given location (optionally filtered by type).

  • find_symbol: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).

  • get_active_project: Gets the name of the currently active project (if any) and lists existing projects

  • get_current_config: Prints the current configuration of the agent, including the active modes, tools, and context.

  • get_symbols_overview: Gets an overview of the top-level symbols defined in a given file or directory.

  • initial_instructions: Gets the initial instructions for the current project. Should only be used in settings where the system prompt cannot be set, e.g. in clients you have no control over, like Claude Desktop.

  • insert_after_symbol: Inserts content after the end of the definition of a given symbol.

  • insert_at_line: Inserts content at a given line in a file.

  • insert_before_symbol: Inserts content before the beginning of the definition of a given symbol.

  • list_dir: Lists files and directories in the given directory (optionally with recursion).

  • list_memories: Lists memories in Serena's project-specific memory store.

  • onboarding: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).

  • prepare_for_new_conversation: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).

  • read_file: Reads a file within the project directory.

  • read_memory: Reads the memory with the given name from Serena's project-specific memory store.

  • replace_lines: Replaces a range of lines within a file with new content.

  • replace_symbol_body: Replaces the full definition of a symbol.

  • restart_language_server: Restarts the language server, may be necessary when edits not through Serena happen.

  • search_for_pattern: Performs a search for a pattern in the project.

  • summarize_changes: Provides instructions for summarizing the changes made to the codebase.

  • switch_modes: Activates modes by providing a list of their names

  • think_about_collected_information: Thinking tool for pondering the completeness of collected information.

  • think_about_task_adherence: Thinking tool for determining whether the agent is still on track with the current task.

  • think_about_whether_you_are_done: Thinking tool for determining whether the task is truly completed.

  • write_memory: Writes a named memory (for future reference) to Serena's project-specific memory store.

Available Tools

33 tools
activate_projectC

Activates the project with the given name.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesThe name of a registered project to activate or a path to a project directory.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('activates') but doesn't explain what activation entails (e.g., does it start a process, load configurations, or change project state?), potential side effects, permissions required, or error conditions. This leaves significant gaps in understanding the tool's behavior.

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 a single, clear sentence that efficiently conveys the core action without unnecessary words. It's front-loaded with the key verb and resource, making it easy to parse quickly, which is ideal for conciseness in tool descriptions.

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

Completeness2/5

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

Given the complexity of a tool that performs an action ('activate') with no annotations or output schema, the description is incomplete. It doesn't clarify what activation means operationally, what happens after activation, or potential dependencies, making it inadequate for an agent to use this tool confidently in varied contexts.

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?

The input schema has 100% description coverage, with the parameter 'project' documented as 'The name of a registered project to activate or a path to a project directory.' The description adds no additional meaning beyond this, as it only references 'the project with the given name.' Since the schema fully covers the parameter, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('activates') and the target resource ('the project with the given name'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'remove_project' or 'switch_modes', which might also affect project states, leaving some ambiguity about its specific role in the toolset.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether the project must be registered or inactive), exclusions, or related tools like 'remove_project' or 'switch_modes', leaving the agent to infer usage context from the tool name alone.

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

check_onboarding_performedA

Checks whether project onboarding was already performed. You should always call this tool before beginning to actually work on the project/after activating a project, but after calling the initial instructions tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies this is a read-only check (non-destructive) and suggests it's a prerequisite step, which adds useful context. However, it doesn't describe potential outcomes (e.g., returns a boolean, error handling) or performance aspects like rate limits, leaving some behavioral traits unclear.

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 highly concise and well-structured, consisting of two sentences that efficiently convey purpose and usage guidelines. Every sentence adds value without redundancy, making it easy to parse and front-loaded with essential information.

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

Completeness4/5

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

Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is largely complete. It explains what the tool does and when to use it, which is sufficient for a simple check operation. However, it doesn't mention what the output might be (e.g., a boolean result), which could be helpful despite the lack of an output schema.

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 tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on usage context. A baseline of 4 is applied since it avoids unnecessary details while being complete for a parameterless tool.

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

Purpose4/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: 'Checks whether project onboarding was already performed.' It uses a specific verb ('Checks') and identifies the resource ('project onboarding'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'onboarding' or 'initial_instructions', which prevents a perfect score.

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 explicit usage guidelines: 'You should always call this tool before beginning to actually work on the project/after activating a project, but after calling the initial instructions tool.' It specifies when to use it (before work, after activation and initial instructions) and references sibling tools ('initial_instructions'), offering clear context and sequencing without misleading information.

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

create_text_fileA

Write a new file (or overwrite an existing file). For existing files, it is strongly recommended to use symbolic operations like replace_symbol_body or insert_after_symbol/insert_before_symbol, if possible. You can also use insert_at_line to insert content at a specific line for existing files if the symbolic operations are not the right choice for what you want to do.

If ever used on an existing file, the content has to be the complete content of that file (so it may never end with something like "The remaining content of the file is left unchanged."). For operations that just replace a part of a file, use the replace_lines or the symbolic editing tools instead. Returns a message indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file to create.
contentYesThe (utf-8-encoded) content to write to the file.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates that this is a destructive write operation (overwrites existing files completely), specifies constraints (content must be complete, no partial changes), and mentions the return value (success/failure message). It doesn't cover permissions, rate limits, or error details, but provides solid operational context.

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 appropriately sized and front-loaded with the core purpose. Every sentence earns its place by providing essential guidance about alternatives, constraints, and return values. It could be slightly more concise by combining some of the alternative tool recommendations, but overall it's well-structured and efficient.

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

Completeness4/5

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

Given this is a destructive write operation with no annotations and no output schema, the description does an excellent job of providing necessary context. It explains the tool's behavior, constraints, alternatives, and return value. The main gap is the lack of detail about specific error conditions or permission requirements, but for a file creation tool with good sibling differentiation, it's quite complete.

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 description coverage is 100%, so the schema already documents both parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema (relative_path and content). However, it does provide important context about how the content parameter must represent complete file content, which adds semantic value beyond the schema's basic description.

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 with specific verbs ('write', 'overwrite') and resource ('file'), distinguishing it from sibling tools like replace_lines, insert_at_line, and symbolic editing tools. It explicitly defines the scope as creating new files or completely overwriting existing ones.

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 explicit guidance on when to use this tool versus alternatives. It specifies that for existing files, symbolic operations (replace_symbol_body, insert_after_symbol, insert_before_symbol) or insert_at_line are recommended instead, and for partial replacements, replace_lines or symbolic editing tools should be used. This clearly differentiates it from all relevant sibling tools.

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

delete_linesA

Deletes the given lines in the file. Requires that the same range of lines was previously read using the read_file tool to verify correctness of the operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file.
start_lineYesThe 0-based index of the first line to be deleted.
end_lineYesThe 0-based index of the last line to be deleted.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the prerequisite verification step, which is a key behavioral trait beyond basic deletion. However, it lacks details on permissions, error handling, or what happens if lines are out of bounds, leaving some behavioral aspects unclear for a destructive operation.

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 two sentences with zero waste: the first states the core purpose, and the second adds crucial usage guidance. It is front-loaded with the main action and appropriately sized, making every sentence earn its place.

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

Completeness4/5

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

Given the tool's complexity (a destructive file operation with 3 parameters) and no annotations or output schema, the description is mostly complete. It covers purpose, usage guidelines, and a key behavioral trait, but lacks details on return values or error conditions, which could be important for an agent invoking this tool.

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 description coverage is 100%, so the schema fully documents the three parameters (relative_path, start_line, end_line). The description does not add any additional meaning or context about the parameters beyond what the schema provides, such as format examples or constraints, meeting the baseline for 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 specific action ('deletes') and resource ('lines in the file'), distinguishing it from sibling tools like 'replace_lines' or 'delete_memory'. It precisely defines what the tool does without being vague or tautological.

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 explicitly states when to use this tool by specifying a prerequisite: 'Requires that the same range of lines was previously read using the `read_file` tool to verify correctness of the operation.' This provides clear guidance on the necessary context and distinguishes it from alternatives that might not require such verification.

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

delete_memoryA

Delete a memory file. Should only happen if a user asks for it explicitly, for example by saying that the information retrieved from a memory file is no longer correct or no longer relevant for the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYes

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. While it mentions this is a deletion operation (implying destructive action), it doesn't specify whether the deletion is permanent/reversible, what permissions are required, or what happens if the file doesn't exist. For a destructive operation with zero annotation coverage, this leaves significant behavioral gaps.

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 efficiently structured in two sentences: the first states the core action, the second provides crucial usage guidelines. Every sentence adds value with zero wasted words, making it easy to parse and understand quickly.

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

Completeness3/5

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

For a destructive operation with no annotations and no output schema, the description provides good usage guidelines but lacks critical behavioral details (permanence, error handling, permissions). The single parameter is undocumented. While the purpose and usage are clear, the description doesn't fully compensate for the missing structured information.

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?

The schema has 0% description coverage for its single parameter 'memory_file_name'. The description doesn't mention this parameter at all, providing no additional semantic context beyond what the schema's title suggests. However, with only one parameter, the baseline is 4, but the complete lack of parameter explanation in the description reduces this to 3.

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

Purpose4/5

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

The description clearly states the verb 'delete' and the resource 'memory file', making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'remove_project' or 'delete_lines', which might also involve deletion operations.

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 explicit guidance on when to use this tool: 'only if a user asks for it explicitly' and gives concrete examples ('information retrieved... no longer correct or no longer relevant'). This clearly defines the triggering conditions and helps distinguish it from other deletion tools.

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

execute_shell_commandA

Execute a shell command and return its output.

IMPORTANT: you should always consider the memory about suggested shell commands before using this tool. If this memory was not loaded in the current conversation, you should load it using the read_memory tool before using this tool.

You should have at least once looked at the suggested shell commands from the corresponding memory created during the onboarding process before using this tool. Never execute unsafe shell commands like rm -rf / or similar! Generally be very careful with deletions. Returns a JSON object containing the command's stdout and optionally stderr output.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesThe shell command to execute.
cwdNoThe working directory to execute the command in. If None, the project root will be used.
capture_stderrNoWhether to capture and return stderr output.
max_answer_charsNoIf the output is longer than this number of characters, no content will be returned. Don't adjust unless there is really no other way to get the content required for the task.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does so effectively. It discloses critical behavioral traits: safety warnings about dangerous commands, memory prerequisites, output format (JSON with stdout/stderr), and a character limit constraint. It doesn't mention rate limits or authentication needs, but covers the most essential behavioral aspects for a shell execution tool.

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 appropriately sized and front-loaded with the core purpose. Each sentence adds value: purpose, prerequisites, safety warnings, and output format. While slightly verbose due to the safety emphasis, every sentence serves a clear function in guiding proper tool usage.

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

Completeness4/5

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

For a potentially dangerous shell execution tool with no annotations and no output schema, the description provides substantial context: safety constraints, prerequisites, behavioral warnings, and output format. It doesn't specify error handling or timeout behavior, but covers the critical aspects needed for responsible tool invocation given the complexity and risk profile.

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 description coverage is 100%, providing complete parameter documentation. The description adds minimal parameter-specific information beyond the schema, only mentioning that output includes 'stdout and optionally stderr' which relates to the capture_stderr parameter. This meets the baseline 3 when schema coverage is high.

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 specific action ('Execute a shell command') and the outcome ('return its output'), distinguishing it from all sibling tools which are file operations, memory management, or project utilities. It provides a complete verb+resource+result statement that leaves no ambiguity about its function.

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 explicit guidance on when to use this tool: only after consulting the 'suggested shell commands' memory via `read_memory`, and never for unsafe commands like `rm -rf /`. It also specifies prerequisites (memory must be loaded) and clear exclusions (unsafe deletions), offering comprehensive usage context.

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

find_fileA

Finds non-gitignored files matching the given file mask within the given relative path. Returns a JSON object with the list of matching files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_maskYesThe filename or file mask (using the wildcards * or ?) to search for.
relative_pathYesThe relative path to the directory to search in; pass "." to scan the project root.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it filters out gitignored files (a critical constraint), returns a JSON object with a list, and searches within a relative path. However, it doesn't mention performance characteristics (e.g., speed, recursion depth), error handling, or what happens with invalid inputs, leaving gaps for a tool with no annotation support.

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 two sentences, front-loaded with the core purpose and followed by the return format. Every word earns its place—no redundancy or fluff. It's efficiently structured for quick comprehension by an AI agent.

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

Completeness4/5

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

Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is reasonably complete. It covers the purpose, key constraint (non-gitignored), and return format. However, it lacks details on output structure (e.g., what fields are in the JSON) and error cases, which could be helpful since there's no output schema.

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 description coverage is 100%, so the schema already fully documents both parameters (file_mask and relative_path). The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain wildcard syntax further or provide examples). With high schema coverage, the baseline is 3, and the description doesn't compensate with extra value.

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 specific action ('Finds'), resource ('non-gitignored files'), and scope ('matching the given file mask within the given relative path'), distinguishing it from siblings like list_dir (which lists all files) or search_for_pattern (which searches content). It explicitly mentions what gets excluded (gitignored files), which is a key differentiator.

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 description provides clear context for when to use this tool (searching for files by name/mask in a directory) but doesn't explicitly state when not to use it or name alternatives. For example, it doesn't contrast with list_dir (which lists all files without filtering) or search_for_pattern (which searches within file content), though the purpose implies these distinctions.

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

find_referencing_symbolsB

Finds symbols that reference the symbol at the given name_path. The result will contain metadata about the referencing symbols as well as a short code snippet around the reference (unless include_body is True, then the short snippet will be omitted). Note that among other kinds of references, this function can be used to find (direct) subclasses of a class, as subclasses are referencing symbols that have the kind class. Returns a list of JSON objects with the symbols referencing the requested symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesFor finding the symbol to find references for, same logic as in the `find_symbol` tool.
relative_pathYesThe relative path to the file containing the symbol for which to find references. Note that here you can't pass a directory but must pass a file.
include_kindsNoSame as in the `find_symbol` tool.
exclude_kindsNoSame as in the `find_symbol` tool.
max_answer_charsNoSame as in the `find_symbol` tool.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behaviors: the result includes metadata and code snippets (with conditions), and it can find subclasses. However, it lacks details on permissions, rate limits, error handling, or the exact structure of returned JSON objects, leaving gaps for a tool with 5 parameters.

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 appropriately sized with three sentences. It front-loads the core purpose, adds behavioral details, and clarifies a use case. There's no wasted text, though the mention of 'include_body' (not in schema) could cause confusion, slightly reducing efficiency.

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

Completeness3/5

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

Given 5 parameters, no annotations, and no output schema, the description is moderately complete. It covers the tool's purpose and some behaviors but lacks details on output structure, error cases, or integration with siblings. For a complex reference-finding tool, this leaves significant gaps for an AI agent to infer correctly.

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 description coverage is 100%, so the schema already documents all parameters. The description adds minimal value: it mentions 'include_body' affecting snippet omission, but this parameter isn't in the schema (likely an error or omission). For other parameters, it only references 'same logic as in the `find_symbol` tool,' not providing additional semantics beyond the schema.

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

Purpose4/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: 'Finds symbols that reference the symbol at the given `name_path`.' It specifies the verb ('finds'), resource ('symbols'), and target ('symbol at the given name_path'). However, it doesn't explicitly differentiate from sibling tools like 'find_symbol' beyond mentioning similar parameter logic.

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

Usage Guidelines3/5

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

The description implies usage by noting it 'can be used to find (direct) subclasses of a class,' providing some context. However, it doesn't explicitly state when to use this tool versus alternatives like 'find_symbol' or 'search_for_pattern,' nor does it mention prerequisites or exclusions beyond parameter references.

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

find_symbolA

Retrieves information on all symbols/code entities (classes, methods, etc.) based on the given name_path, which represents a pattern for the symbol's path within the symbol tree of a single file. The returned symbol location can be used for edits or further queries. Specify depth > 0 to retrieve children (e.g., methods of a class).

The matching behavior is determined by the structure of name_path, which can either be a simple name (e.g. "method") or a name path like "class/method" (relative name path) or "/class/method" (absolute name path). Note that the name path is not a path in the file system but rather a path in the symbol tree within a single file. Thus, file or directory names should never be included in the name_path. For restricting the search to a single file or directory, the within_relative_path parameter should be used instead. The retrieved symbols' name_path attribute will always be composed of symbol names, never file or directory names.

Key aspects of the name path matching behavior:

  • Trailing slashes in name_path play no role and are ignored.

  • The name of the retrieved symbols will match (either exactly or as a substring) the last segment of name_path, while other segments will restrict the search to symbols that have a desired sequence of ancestors.

  • If there is no starting or intermediate slash in name_path, there is no restriction on the ancestor symbols. For example, passing method will match against symbols with name paths like method, class/method, class/nested_class/method, etc.

  • If name_path contains a / but doesn't start with a /, the matching is restricted to symbols with the same ancestors as the last segment of name_path. For example, passing class/method will match against class/method as well as nested_class/class/method but not method.

  • If name_path starts with a /, it will be treated as an absolute name path pattern, meaning that the first segment of it must match the first segment of the symbol's name path. For example, passing /class will match only against top-level symbols like class but not against nested_class/class. Passing /class/method will match against class/method but not nested_class/class/method or method. Returns JSON string: a list of symbols (with locations) matching the name.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesThe name path pattern to search for, see above for details.
depthNoDepth to retrieve descendants (e.g., 1 for class methods/attributes).
relative_pathNoOptional. Restrict search to this file or directory. If None, searches entire codebase. If a directory is passed, the search will be restricted to the files in that directory. If a file is passed, the search will be restricted to that file. If you have some knowledge about the codebase, you should use this parameter, as it will significantly speed up the search as well as reduce the number of results.
include_bodyNoIf True, include the symbol's source code. Use judiciously.
include_kindsNoOptional. List of LSP symbol kind integers to include. (e.g., 5 for Class, 12 for Function). Valid kinds: 1=file, 2=module, 3=namespace, 4=package, 5=class, 6=method, 7=property, 8=field, 9=constructor, 10=enum, 11=interface, 12=function, 13=variable, 14=constant, 15=string, 16=number, 17=boolean, 18=array, 19=object, 20=key, 21=null, 22=enum member, 23=struct, 24=event, 25=operator, 26=type parameter.
exclude_kindsNoOptional. List of LSP symbol kind integers to exclude. Takes precedence over `include_kinds`.
substring_matchingNoIf True, use substring matching for the last segment of `name`.
max_answer_charsNoMax characters for the JSON result. If exceeded, no content is returned.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains key behaviors: the matching logic for `name_path`, the role of `depth` for retrieving children, and the return format (JSON list of symbols with locations). It also hints at performance considerations with `relative_path` but lacks details on rate limits or error handling.

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

Conciseness3/5

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

The description is front-loaded with the core purpose but becomes verbose with detailed explanations of `name_path` matching behavior. While informative, some sentences could be more streamlined, and the structure includes repetitive examples that might be condensed for better clarity without losing essential information.

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

Completeness4/5

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

Given the complexity of 8 parameters, no annotations, and no output schema, the description does a good job of covering key aspects like purpose, usage, and parameter semantics. It explains the return format and provides examples, but could improve by summarizing all parameters briefly or mentioning error cases to be more complete for such a multifaceted tool.

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 the baseline is 3. The description adds significant value by elaborating on `name_path` semantics, including examples and matching rules, and clarifies `depth` usage. It also mentions `relative_path` for restricting searches, enhancing understanding beyond the schema. However, it does not cover all parameters like `include_kinds` or `max_answer_chars` in detail.

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: 'Retrieves information on all symbols/code entities (classes, methods, etc.) based on the given `name_path`.' It specifies the resource (symbols/code entities), the verb (retrieves information), and distinguishes it from siblings like 'find_file' or 'find_referencing_symbols' by focusing on symbol tree navigation within files.

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 description provides clear context on when to use this tool, such as for retrieving symbol locations for edits or queries, and mentions using the `relative_path` parameter to restrict searches. However, it does not explicitly state when not to use it or name specific alternatives among siblings, though it implies differentiation from file-based searches.

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

get_current_configB

Print the current configuration of the agent, including the active and available projects, tools, contexts, and modes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a read operation ('Print') but doesn't mention whether it requires permissions, has side effects, returns structured vs. textual data, or has any limitations. The description is minimal on behavioral context beyond the basic operation.

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 a single, efficient sentence that front-loads the core purpose and provides specific details about what's included. Every word earns its place with no redundancy or unnecessary elaboration.

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

Completeness3/5

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

For a zero-parameter read tool with no annotations and no output schema, the description provides adequate but minimal context. It specifies what configuration elements are included, but doesn't address format, structure, or potential limitations of the output. Given the complexity is low (no parameters), this is minimally viable but could be more complete.

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 tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and the schema already fully documents this.

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

Purpose4/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: 'Print the current configuration of the agent' with specific details about what's included (active/available projects, tools, contexts, modes). It uses a specific verb ('Print') and resource ('configuration'), though it doesn't explicitly distinguish from siblings like 'switch_modes' or 'activate_project'.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites, timing considerations, or relationships to sibling tools like 'switch_modes' or 'activate_project' that might affect configuration state.

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

get_symbols_overviewA

Gets an overview of the given file or directory. For each analyzed file, we list the top-level symbols in the file (name_path, kind). Use this tool to get a high-level understanding of the code symbols. Calling this is often a good idea before more targeted reading, searching or editing operations on the code symbols. Returns a JSON object mapping relative paths of all contained files to info about top-level symbols in the file (name_path, kind).

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file or directory to get the overview of.
max_answer_charsNoIf the overview is longer than this number of characters, no content will be returned. Don't adjust unless there is really no other way to get the content required for the task. If the overview is too long, you should use a smaller directory instead, (e.g. a subdirectory).

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses key behavioral traits: it analyzes files, lists top-level symbols with name_path and kind, and returns a JSON object mapping relative paths to symbol info. However, it doesn't mention potential limitations like performance impact, file size constraints, or error conditions. The description adds useful context but lacks comprehensive behavioral disclosure.

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 appropriately sized with four sentences that each serve distinct purposes: stating the tool's function, explaining what it lists, providing usage guidance, and describing the return format. It's front-loaded with the core purpose. While efficient, the final sentence could be slightly more concise by integrating return format details earlier.

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

Completeness4/5

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

Given the tool's moderate complexity (symbol analysis), no annotations, and no output schema, the description does a good job covering the essentials: purpose, usage context, and return format. However, it could better address behavioral aspects like what happens with invalid paths or large directories. For a read-only analysis tool, it's mostly complete but has minor gaps.

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 description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain relative_path conventions or max_answer_chars implications). With high schema coverage, the baseline is 3 even without param details in the description.

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 with specific verbs ('gets an overview', 'list the top-level symbols') and resources ('file or directory', 'code symbols'). It distinguishes itself from siblings like 'read_file', 'find_symbol', and 'list_dir' by focusing specifically on symbol extraction rather than file content, symbol location, or directory listing.

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 explicit guidance on when to use this tool: 'Calling this is often a good idea before more targeted reading, searching or editing operations on the code symbols.' This gives clear context for its role as a preparatory step for other operations, distinguishing it from direct manipulation or search tools.

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

initial_instructionsA

Get the initial instructions for the current coding project. You should always call this tool before starting to work (including using any other tool) on any programming task! The only exception is when a user asks you to activate a project, in which case you should call the activate_project first instead and then call this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the tool's role in workflow sequencing (must be called first) and its dependency on project activation, which adds useful context. However, it lacks details on what the instructions contain, potential errors, or response format, leaving some behavioral aspects unclear.

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 concise and well-structured, using three sentences that each add value: the first states the purpose, the second provides the primary usage rule, and the third covers the exception. There is no redundant or filler content, making it easy to parse and understand quickly.

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

Completeness4/5

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

Given the tool's simplicity (0 parameters, no annotations, no output schema), the description is largely complete. It explains the purpose, usage rules, and exception handling. However, without an output schema, it could benefit from hinting at what the instructions might include (e.g., project goals, constraints) to better set expectations 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?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter information is needed. The description appropriately does not discuss parameters, focusing instead on usage context. A baseline of 4 is applied as it efficiently handles the lack of parameters without unnecessary details.

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 with a specific verb ('Get') and resource ('initial instructions for the current coding project'). It distinguishes itself from sibling tools by focusing on retrieving project-specific instructions rather than performing actions like file manipulation or project activation.

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 explicit usage guidelines: it specifies when to use this tool ('always call this tool before starting to work on any programming task') and when not to use it (exception: 'when a user asks you to activate a project, call `activate_project` first instead'). It names the alternative tool (`activate_project`) for the exception case.

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

insert_after_symbolA

Inserts the given body/content after the end of the definition of the given symbol (via the symbol's location). A typical use case is to insert a new class, function, method, field or variable assignment.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesName path of the symbol after which to insert content (definitions in the `find_symbol` tool apply).
relative_pathYesThe relative path to the file containing the symbol.
bodyYesThe body/content to be inserted. The inserted code shall begin with the next line after the symbol.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool inserts content after a symbol's definition and that the inserted code begins on the next line, adding useful behavioral context. However, it does not cover permissions, error handling, or side effects, leaving gaps for a mutation tool with no annotation coverage.

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 front-loaded with the core purpose in the first sentence, followed by a concise typical use case. Both sentences earn their place by clarifying intent and context without any wasted words, making it efficiently structured and easy to parse.

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

Completeness3/5

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

Given no annotations and no output schema, the description provides adequate purpose and usage context but lacks details on behavioral traits like error handling or side effects. For a mutation tool with 3 parameters and 100% schema coverage, it is minimally viable but has clear gaps in completeness, especially around operational transparency.

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 description coverage is 100%, so the schema already documents all three parameters. The description adds minimal value by implying that 'name_path' refers to a symbol's location and 'body' is the content to insert, but it does not provide additional syntax or format details beyond what the schema provides. Baseline 3 is appropriate when 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 the verb 'inserts' and specifies the resource 'body/content' after the definition of a given symbol via its location. It distinguishes from sibling tools like 'insert_before_symbol' by specifying 'after' and from 'insert_at_line' by focusing on symbol-based positioning. The typical use cases (class, function, method, field, variable assignment) further clarify 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 description provides clear context for when to use this tool: for inserting content after a symbol's definition, with typical use cases listed. It implicitly distinguishes from 'insert_before_symbol' by specifying 'after' and from 'insert_at_line' by using symbol-based positioning. However, it does not explicitly state when not to use it or name alternatives, missing full explicit guidance.

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

insert_at_lineA

Inserts the given content at the given line in the file, pushing existing content of the line down. In general, symbolic insert operations like insert_after_symbol or insert_before_symbol should be preferred if you know which symbol you are looking for. However, this can also be useful for small targeted edits of the body of a longer symbol (without replacing the entire body).

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file.
lineYesThe 0-based index of the line to insert content at.
contentYesThe content to be inserted.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It explains the insertion behavior ('pushing existing content down') and mentions use cases, but lacks details on error handling (e.g., what happens if the line index is out of bounds), file permissions, or whether the operation is atomic. It provides basic behavioral context but misses advanced operational traits.

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 efficiently structured in three sentences: the first states the core functionality, the second provides usage guidance relative to alternatives, and the third adds a specific use case. Every sentence adds value without redundancy, making it front-loaded and appropriately sized.

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

Completeness4/5

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

Given the tool's moderate complexity (file editing with line-based insertion), no annotations, and no output schema, the description does well by explaining the operation, comparing to siblings, and suggesting use cases. However, it lacks details on error conditions or return values, leaving some gaps in full contextual 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 description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds no additional parameter semantics beyond what the schema provides (e.g., no clarification on line numbering conventions or content formatting). The baseline score of 3 reflects adequate coverage via 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 the specific action ('inserts the given content at the given line') and resource ('in the file'), with precise mechanics ('pushing existing content of the line down'). It explicitly distinguishes from sibling tools like 'insert_after_symbol' and 'insert_before_symbol', 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 description provides explicit guidance on when to use alternatives ('symbolic insert operations... should be preferred if you know which symbol you are looking for') and when this tool is appropriate ('small targeted edits of the body of a longer symbol without replacing the entire body'). This clearly defines the tool's niche relative to siblings.

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

insert_before_symbolA

Inserts the given body/content before the beginning of the definition of the given symbol (via the symbol's location). A typical use case is to insert a new class, function, method, field or variable assignment. It also can be used to insert a new import statement before the first symbol in the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesName path of the symbol before which to insert content (definitions in the `find_symbol` tool apply).
relative_pathYesThe relative path to the file containing the symbol.
bodyYesThe body/content to be inserted before the line in which the referenced symbol is defined.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the insertion action but lacks details on permissions needed, error handling (e.g., if the symbol is not found), whether the operation is idempotent, or what happens to existing content. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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 appropriately sized with three sentences that are front-loaded: the first sentence states the core action, and the following sentences provide use cases without redundancy. Every sentence adds value, though it could be slightly more concise by combining the use case examples into one sentence.

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

Completeness3/5

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

Given the tool's complexity (a mutation operation with 3 parameters), no annotations, and no output schema, the description is moderately complete. It covers the purpose and usage but lacks behavioral details like error handling or return values. For a tool with no structured safety or output information, it should do more to compensate, but it meets a minimum viable level.

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 description coverage is 100%, so the schema already documents all three parameters (name_path, relative_path, body) with clear descriptions. The description adds minimal value beyond the schema by implying the parameters' roles in the insertion process but does not provide additional syntax, format, or constraints details. Baseline 3 is appropriate when the 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 the verb 'inserts' and the resource 'body/content' before 'the definition of the given symbol', specifying the action and target. It distinguishes from siblings like 'insert_after_symbol' by specifying 'before' and from 'insert_at_line' by using symbol-based positioning, making the purpose specific and differentiated.

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 description provides clear context for when to use this tool: 'to insert a new class, function, method, field or variable assignment' or 'to insert a new import statement before the first symbol in the file'. It implies usage based on symbol-based insertion needs but does not explicitly state when not to use it or name alternatives like 'insert_at_line' for line-based insertion, though the context is sufficient for typical cases.

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

list_dirA

Lists all non-gitignored files and directories in the given directory (optionally with recursion). Returns a JSON object with the names of directories and files within the given directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the directory to list; pass "." to scan the project root.
recursiveYesWhether to scan subdirectories recursively.
max_answer_charsNoIf the output is longer than this number of characters, no content will be returned. Don't adjust unless there is really no other way to get the content required for the task.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it filters out gitignored files, returns JSON structure with directory/file names, and mentions recursion. However, it doesn't address important aspects like performance implications of recursion, error handling for invalid paths, or what happens when max_answer_chars is exceeded.

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 efficiently structured in two sentences: the first states the core functionality, the second describes the return format. It's appropriately sized for the tool's complexity, though it could be slightly more front-loaded by mentioning the JSON return earlier.

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

Completeness3/5

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

For a read-only directory listing tool with no output schema, the description provides adequate but incomplete context. It covers what the tool does and the return format, but lacks information about error conditions, performance characteristics, and the practical implications of the max_answer_chars parameter. The absence of annotations increases the need for more behavioral disclosure.

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 description coverage is 100%, providing solid documentation for all parameters. The description adds minimal value beyond the schema - it mentions recursion but doesn't elaborate on its effects, and doesn't explain the interaction between parameters. The baseline of 3 is appropriate when the 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 the verb ('Lists'), resource ('all non-gitignored files and directories'), and scope ('in the given directory'). It distinguishes itself from siblings like 'find_file' by focusing on directory listing rather than searching, and from 'read_file' by returning metadata rather than content.

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

Usage Guidelines3/5

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

The description implies usage through its functional description but doesn't explicitly state when to use this tool versus alternatives like 'find_file' or 'search_for_pattern'. It mentions recursion as an option but doesn't provide guidance on when to enable it versus using other tools for deeper searches.

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

list_memoriesB

List available memories. Any memory can be read using the read_memory tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic action ('List available memories') without mentioning any behavioral traits such as permissions required, rate limits, pagination, or what 'available' means in context. This leaves significant gaps for a tool that likely interacts with stored data.

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 extremely concise and front-loaded: 'List available memories.' The second sentence adds useful context without redundancy. Every sentence earns its place, making it efficient and well-structured with zero waste.

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

Completeness2/5

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

Given the complexity of listing stored data (memories), no annotations, and no output schema, the description is incomplete. It doesn't explain what 'memories' are, how they're formatted in the output, or any constraints on availability. For a data-listing tool in this context, more detail is needed to be fully helpful.

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 tool has 0 parameters, and the schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately avoids unnecessary details. A baseline of 4 is applied as it meets expectations for a parameterless tool.

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

Purpose4/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: 'List available memories.' This is a specific verb+resource combination that tells the agent what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'read_memory' beyond mentioning it, so it doesn't reach the highest score.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by mentioning that 'Any memory can be read using the `read_memory` tool,' which suggests this tool is for listing rather than reading. However, it lacks explicit when-to-use instructions, alternatives, or exclusions, leaving some ambiguity about its specific context compared to other list/search tools.

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

onboardingA

Call this tool if onboarding was not performed yet. You will call this tool at most once per conversation. Returns instructions on how to create the onboarding information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns instructions (not performing the onboarding itself) and has a usage limit (once per conversation), which adds useful behavioral context. However, it doesn't cover potential side effects, error conditions, or what 'instructions' entail, leaving gaps for a mutation-related tool.

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 highly concise and well-structured with two sentences: the first states when to use it, and the second covers usage frequency and return value. Every sentence adds essential information without redundancy, making it front-loaded and efficient.

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

Completeness3/5

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

Given the tool's complexity (likely low, with 0 parameters) and no annotations or output schema, the description is somewhat complete but has gaps. It explains when and how often to use it and what it returns, but doesn't detail the format of 'instructions' or potential errors. For a tool that might involve setup or configuration, more context on outcomes would be beneficial.

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 tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't discuss parameters, which is appropriate. A baseline of 4 is applied since it compensates adequately for the lack of parameters by focusing on usage context.

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

Purpose4/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: to be called when onboarding hasn't been performed yet, and it returns instructions for creating onboarding information. It uses specific verbs ('call', 'returns') and identifies the resource (onboarding information). However, it doesn't explicitly differentiate itself from sibling tools like 'check_onboarding_performed' or 'initial_instructions', which prevents a perfect score.

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 explicit usage guidelines: 'Call this tool if onboarding was not performed yet' and 'You will call this tool at most once per conversation.' This clearly defines when to use it (onboarding not done) and includes a usage constraint (once per conversation), though it doesn't mention alternatives like 'check_onboarding_performed'.

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

prepare_for_new_conversationB

Instructions for preparing for a new conversation. This tool should only be called on explicit user request.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description mentions 'preparing for a new conversation' but doesn't explain what this entails behaviorally—whether it clears memory, resets state, requires specific permissions, has side effects, or what the expected outcome is. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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 two short, clear sentences with zero wasted words. It front-loads the purpose and immediately follows with a critical usage guideline. Every sentence earns its place by providing essential information efficiently.

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

Completeness3/5

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

Given the tool has 0 parameters, no annotations, and no output schema, the description provides basic purpose and strong usage guidelines but lacks details on what the preparation involves or what happens after invocation. For a tool that likely resets or initializes conversation state, more context on behavior and outcomes would be helpful, making it minimally adequate but with 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?

The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to add parameter semantics since there are none. Baseline for 0 parameters is 4, as the description appropriately doesn't discuss parameters and focuses on usage.

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

Purpose2/5

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

The description states 'Instructions for preparing for a new conversation' which is a tautology that essentially restates the tool name 'prepare_for_new_conversation'. It doesn't specify what the preparation actually involves (e.g., clearing context, resetting state, initializing settings) or what resource it operates on. The purpose remains vague rather than specific.

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 explicitly states 'This tool should only be called on explicit user request', providing clear guidance on when to use it (only when the user explicitly asks) and implying when not to use it (automatically or without user request). This is a strong, explicit usage rule that distinguishes it from alternatives.

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

read_fileA

Reads the given file or a chunk of it. Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for. Reading the entire file is only recommended if there is no other way to get the content required for the task. Returns the full text of the file at the given relative path.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file to read.
start_lineNoThe 0-based index of the first line to be retrieved.
end_lineNoThe 0-based index of the last line to be retrieved (inclusive). If None, read until the end of the file.
max_answer_charsNoIf the file (chunk) is longer than this number of characters, no content will be returned. Don't adjust unless there is really no other way to get the content required for the task.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses some behavioral traits: it can read chunks of files (via start_line/end_line), has a character limit (max_answer_chars), and returns full text. However, it doesn't cover important aspects like error handling (e.g., what happens if file doesn't exist), performance implications, or whether this is a read-only operation (though implied by 'Reads'). The description adds value but lacks comprehensive behavioral context for a tool with no 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 appropriately sized with three sentences that each serve a distinct purpose: stating the core function, providing usage guidelines, and specifying the return value. It's front-loaded with the main action. While efficient, the third sentence could be slightly more concise by integrating the return information earlier.

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

Completeness4/5

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

Given the tool's moderate complexity (file reading with chunking and limits), no annotations, and no output schema, the description does reasonably well. It covers the core purpose, usage guidelines, and return value. However, it lacks details about error conditions, performance characteristics, or what exactly 'Returns the full text' means in practice (e.g., formatting, encoding). For a tool with no annotations or output schema, it's mostly complete but has some gaps.

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 description coverage is 100%, so the schema already documents all 4 parameters thoroughly. The description adds minimal parameter semantics beyond the schema: it mentions reading 'a chunk of it' (hinting at start_line/end_line) and the character limit warning. However, it doesn't provide additional syntax, format, or usage details that aren't already in the schema descriptions. Baseline 3 is appropriate when 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 the tool's purpose with specific verbs ('Reads', 'Returns') and resource ('the given file or a chunk of it'). It distinguishes from sibling tools by explicitly mentioning alternatives like 'find_symbol' or 'find_referencing_symbols' should be preferred when possible, making the purpose specific and differentiated.

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 explicit guidance on when to use this tool vs alternatives: 'Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for. Reading the entire file is only recommended if there is no other way to get the content required for the task.' This clearly defines when to use and when not to use this tool, naming specific alternatives.

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

read_memoryA

Read the content of a memory file. This tool should only be used if the information is relevant to the current task. You can infer whether the information is relevant from the memory file name. You should not read the same memory file multiple times in the same conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYes
max_answer_charsNo

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses behavioral traits like the relevance requirement and the prohibition on repeated reads, which are useful. However, it doesn't cover critical aspects such as error handling (e.g., what happens if the file doesn't exist), performance characteristics, or output format. For a read operation with no annotation support, this leaves significant gaps in behavioral understanding.

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 highly concise and well-structured, consisting of three sentences that each serve a clear purpose: stating the tool's function, providing usage criteria, and setting a behavioral constraint. There is no wasted language, and key information is front-loaded, making it easy to parse quickly.

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

Completeness3/5

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

Given the tool's moderate complexity (reading files with relevance checks), lack of annotations, no output schema, and 0% schema description coverage, the description is incomplete. It covers usage guidelines well but misses details on parameters, error handling, and output format. For a tool that interacts with file content, more context is needed to ensure reliable use by an AI agent.

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 description coverage is 0%, so the schema provides no parameter details. The description adds no explicit information about the parameters, such as what 'memory_file_name' refers to or how 'max_answer_chars' affects the output. It implies relevance from the file name but doesn't explain parameter usage. With two parameters and no schema descriptions, the description fails to compensate adequately, resulting in a baseline score.

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

Purpose4/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 as 'Read the content of a memory file,' which is a specific verb+resource combination. It distinguishes itself from sibling tools like 'list_memories' (which lists files) and 'write_memory' (which writes content), though it doesn't explicitly name these alternatives. The purpose is unambiguous but could be more specific about what constitutes a 'memory file' in this context.

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 description provides explicit guidance on when to use the tool ('only if the information is relevant to the current task') and when not to use it ('should not read the same memory file multiple times in the same conversation'). It also implies relevance can be inferred from the file name. However, it doesn't name specific alternative tools (e.g., 'read_file' for non-memory files) or detail edge cases, keeping it from a perfect score.

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

remove_projectC

Removes a project from the Serena configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_nameYesName of the project to remove.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states 'Removes' implying a destructive mutation, but doesn't disclose critical behavioral traits such as whether removal is irreversible, requires specific permissions, affects other configuration elements, or has side effects like data loss. This is inadequate for a mutation tool with zero annotation coverage.

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 a single, clear sentence with zero wasted words. It's front-loaded with the core action and resource, making it highly efficient and easy to parse, which is ideal for conciseness.

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

Completeness2/5

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

Given the tool's complexity as a destructive mutation with no annotations and no output schema, the description is incomplete. It lacks details on behavior, usage context, and return values, making it insufficient for safe and effective tool invocation by an AI agent.

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?

The description adds no parameter semantics beyond what the input schema provides. With 100% schema description coverage (the 'project_name' parameter is fully documented in the schema), the baseline is 3. The description doesn't explain the parameter's role or constraints, so it doesn't add value.

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

Purpose4/5

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

The description clearly states the action ('Removes') and resource ('a project from the Serena configuration'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'delete_memory' or 'delete_lines', which also perform deletion operations on different resources, so it doesn't reach the highest score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether the project must exist or be inactive), consequences (e.g., if removal is permanent), or related tools like 'activate_project' for context, leaving the agent with no usage context.

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

replace_linesA

Replaces the given range of lines in the given file. Requires that the same range of lines was previously read using the read_file tool to verify correctness of the operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file.
start_lineYesThe 0-based index of the first line to be deleted.
end_lineYesThe 0-based index of the last line to be deleted.
contentYesThe content to insert.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses the critical behavioral trait that prior reading with 'read_file' is required for correctness, which is essential for safe operation. However, it doesn't mention potential side effects like file locking, error handling, or whether changes are reversible, leaving gaps for a mutation tool.

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?

Two sentences, front-loaded with the core purpose and followed by a crucial prerequisite. Every sentence earns its place with no wasted words, making it efficient and easy to parse.

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

Completeness4/5

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

For a mutation tool with no annotations and no output schema, the description is mostly complete: it clearly states the purpose, usage guidelines, and a key behavioral requirement. However, it lacks details on return values or error conditions, which could be important given the tool's complexity and potential for data loss.

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 description coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond the schema, such as explaining how 'start_line' and 'end_line' define the range or how 'content' interacts with the replacement. Baseline 3 is appropriate when 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 the specific action ('replaces'), the resource ('range of lines in the given file'), and distinguishes it from siblings like 'delete_lines', 'insert_at_line', and 'replace_symbol_body' by specifying it replaces a range with new content rather than deleting, inserting at a single line, or replacing symbol bodies.

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?

It explicitly states when to use this tool: 'Requires that the same range of lines was previously read using the `read_file` tool to verify correctness of the operation.' This provides clear prerequisites and distinguishes it from alternatives like 'insert_at_line' or 'replace_symbol_body' by emphasizing the need for prior verification.

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

replace_regexA

Replaces one or more occurrences of the given regular expression. This is the preferred way to replace content in a file whenever the symbol-level tools are not appropriate. Even large sections of code can be replaced by providing a concise regular expression of the form "beginning.*?end-of-text-to-be-replaced". Always try to use wildcards to avoid specifying the exact content of the code to be replaced, especially if it spans several lines.

IMPORTANT: REMEMBER TO USE WILDCARDS WHEN APPROPRIATE! I WILL BE VERY UNHAPPY IF YOU WRITE LONG REGEXES WITHOUT USING WILDCARDS INSTEAD!.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file.
regexYesA Python-style regular expression, matches of which will be replaced. Dot matches all characters, multi-line matching is enabled.
replYesThe string to replace the matched content with, which may contain backreferences like \1, \2, etc.
allow_multiple_occurrencesNoIf True, the regex may match multiple occurrences in the file and all of them will be replaced. If this is set to False and the regex matches multiple occurrences, an error will be returned (and you may retry with a revised, more specific regex).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by explaining key behavioral aspects: it's a destructive operation (replaces content), handles multiple occurrences (with the allow_multiple_occurrences parameter), and provides practical advice about regex patterns. However, it doesn't mention error handling or file permissions.

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

Conciseness3/5

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

The description is appropriately sized but has structural issues. The first paragraph is well-structured, but the second paragraph with ALL CAPS and emotional language ('I WILL BE VERY UNHAPPY') is unprofessional and redundant with the first paragraph's advice about wildcards.

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

Completeness4/5

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

For a destructive file operation with no annotations and no output schema, the description provides good context about when to use it, behavioral characteristics, and practical regex advice. It could be more complete by mentioning error conditions or what happens when the file doesn't exist, but covers the essential aspects well.

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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some context about regex patterns ('beginning.*?end-of-text-to-be-replaced') and wildcard usage, but doesn't provide additional parameter-specific semantics beyond what's in 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 the tool's purpose: 'Replaces one or more occurrences of the given regular expression' and specifies it's for file content replacement. It distinguishes from siblings like 'replace_lines' and 'replace_symbol_body' by emphasizing regex-based replacement when symbol-level tools aren't appropriate.

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 explicit guidance on when to use this tool ('whenever the symbol-level tools are not appropriate') and offers specific usage advice about preferring wildcards over long regexes. It also distinguishes from sibling tools by mentioning the alternative symbol-level approaches.

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

replace_symbol_bodyC

Replaces the body of the symbol with the given name_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesFor finding the symbol to replace, same logic as in the `find_symbol` tool.
relative_pathYesThe relative path to the file containing the symbol.
bodyYesThe new symbol body. Important: Begin directly with the symbol definition and provide no leading indentation for the first line (but do indent the rest of the body according to the context).

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It states the tool 'replaces' the body, implying a mutation operation, but doesn't cover critical aspects like whether this is destructive (e.g., overwrites existing content), requires specific permissions, or has side effects. The mention of 'name_path' logic hints at dependencies but lacks detail on error handling or response format, leaving significant gaps in transparency.

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 a single, direct sentence that efficiently conveys the core action without unnecessary words. It front-loads the key information ('replaces the body of the symbol') and avoids redundancy, making it highly concise and well-structured for quick understanding.

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

Completeness2/5

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

Given the complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., destructiveness, error cases), usage context, and what the tool returns. While the schema covers parameters well, the overall context for safe and effective use is insufficient, especially for a tool that modifies symbols.

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 description coverage is 100%, so the input schema already documents all parameters thoroughly. The description adds minimal value by referencing 'name_path' logic from 'find_symbol', which provides some contextual meaning beyond the schema. However, it doesn't elaborate on parameter interactions or usage examples, staying at the baseline level where the schema does most of the work.

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

Purpose4/5

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

The description clearly states the action ('replaces') and target ('body of the symbol'), making the purpose understandable. It specifies the 'name_path' parameter as the identifier, which adds specificity. However, it doesn't explicitly differentiate from sibling tools like 'replace_lines' or 'insert_after_symbol', which could involve similar symbol modifications, so it falls short of a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as 'replace_lines' or 'insert_before_symbol', which might handle similar tasks. It mentions 'name_path' logic from 'find_symbol', implying a prerequisite but not explicitly stating when this tool is preferred. Without clear usage context or exclusions, it offers minimal practical guidance.

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

restart_language_serverA

Use this tool only on explicit user request or after confirmation. It may be necessary to restart the language server if the user performs edits not through Serena, so the language server state becomes outdated and further editing attempts lead to errors.

If such editing errors happen, you should suggest using this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains the tool's purpose (restarting), the triggering condition (outdated state from external edits), and the impact (resolving errors). However, it lacks details on side effects, such as whether the restart is disruptive or temporary.

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 concise and well-structured: it front-loads the primary usage rule, explains the rationale, and provides actionable guidance. Every sentence adds value without redundancy, making it efficient for an AI agent.

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

Completeness4/5

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

Given the tool's complexity (a restart operation with no parameters and no output schema) and lack of annotations, the description is mostly complete. It covers the purpose, usage rules, and context, but could benefit from mentioning potential side effects or confirmation details to be fully comprehensive.

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 tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description appropriately focuses on usage context without redundant parameter details, meeting the baseline for this scenario.

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

Purpose4/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: restarting the language server when its state becomes outdated due to external edits, which helps resolve editing errors. It specifies the verb ('restart') and resource ('language server'), though it doesn't explicitly differentiate from sibling tools like 'activate_project' or 'switch_modes'.

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 explicit usage guidelines: use only on explicit user request or after confirmation, and suggest it when editing errors occur due to outdated language server state. It clearly defines when to use the tool, though it doesn't mention specific alternatives among siblings.

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

search_for_patternA

Offers a flexible search for arbitrary patterns in the codebase, including the possibility to search in non-code files. Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for.

Pattern Matching Logic: For each match, the returned result will contain the full lines where the substring pattern is found, as well as optionally some lines before and after it. The pattern will be compiled with DOTALL, meaning that the dot will match all characters including newlines. This also means that it never makes sense to have .* at the beginning or end of the pattern, but it may make sense to have it in the middle for complex patterns. If a pattern matches multiple lines, all those lines will be part of the match. Be careful to not use greedy quantifiers unnecessarily, it is usually better to use non-greedy quantifiers like .*? to avoid matching too much content.

File Selection Logic: The files in which the search is performed can be restricted very flexibly. Using restrict_search_to_code_files is useful if you are only interested in code symbols (i.e., those symbols that can be manipulated with symbolic tools like find_symbol). You can also restrict the search to a specific file or directory, and provide glob patterns to include or exclude certain files on top of that. The globs are matched against relative file paths from the project root (not to the relative_path parameter that is used to further restrict the search). Smartly combining the various restrictions allows you to perform very targeted searches. Returns A JSON object mapping file paths to lists of matched consecutive lines (with context, if requested).

ParametersJSON Schema
NameRequiredDescriptionDefault
substring_patternYesRegular expression for a substring pattern to search for.
context_lines_beforeNoNumber of lines of context to include before each match.
context_lines_afterNoNumber of lines of context to include after each match.
paths_include_globNoOptional glob pattern specifying files to include in the search. Matches against relative file paths from the project root (e.g., "*.py", "src/**/*.ts"). Only matches files, not directories.
paths_exclude_globNoOptional glob pattern specifying files to exclude from the search. Matches against relative file paths from the project root (e.g., "*test*", "**/*_generated.py"). Takes precedence over paths_include_glob. Only matches files, not directories.
relative_pathNoOnly subpaths of this path (relative to the repo root) will be analyzed. If a path to a single file is passed, only that will be searched. The path must exist, otherwise a `FileNotFoundError` is raised.
restrict_search_to_code_filesNoWhether to restrict the search to only those files where analyzed code symbols can be found. Otherwise, will search all non-ignored files. Set this to True if your search is only meant to discover code that can be manipulated with symbolic tools. For example, for finding classes or methods from a name pattern. Setting to False is a better choice if you also want to search in non-code files, like in html or yaml files, which is why it is the default.
max_answer_charsNoIf the output is longer than this number of characters, no content will be returned. Don't adjust unless there is really no other way to get the content required for the task. Instead, if the output is too long, you should make a stricter query.

TDQS

A4.8/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It thoroughly explains the pattern matching logic (e.g., DOTALL compilation, handling of multi-line matches, advice on greedy vs. non-greedy quantifiers), file selection logic (e.g., glob patterns, precedence rules), and output format ('Returns A JSON object mapping file paths to lists of matched consecutive lines'). This goes well beyond basic functionality.

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 (Pattern Matching Logic, File Selection Logic) and front-loaded key information. Most sentences earn their place by providing essential guidance, though some parts could be slightly more concise (e.g., the explanation of DOTALL and quantifiers is detailed but necessary).

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 (8 parameters, no annotations, no output schema), the description is highly complete. It covers purpose, usage guidelines, behavioral details, parameter semantics, and output format. The only minor gap is the lack of an output schema, but the description compensates by specifying the return value structure.

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?

With 100% schema description coverage, the baseline is 3. The description adds significant value by explaining the semantics of parameters like restrict_search_to_code_files ('useful if you are only interested in code symbols'), relative_path ('only subpaths of this path'), and glob patterns ('matched against relative file paths from the project root'). However, it doesn't cover all parameters equally (e.g., max_answer_chars is only briefly mentioned).

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: 'Offers a flexible search for arbitrary patterns in the codebase, including the possibility to search in non-code files.' It specifies the verb ('search'), resource ('codebase'), and scope ('non-code files'), and distinguishes it from siblings like find_symbol and find_referencing_symbols by noting when to prefer those alternatives.

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 explicit guidance on when to use this tool versus alternatives: 'Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for.' It also explains when to use specific parameters, such as restrict_search_to_code_files for code symbols or False for non-code files.

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

summarize_changesA

Summarize the changes you have made to the codebase. This tool should always be called after you have fully completed any non-trivial coding task, but only after the think_about_whether_you_are_done call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions timing ('after you have fully completed any non-trivial coding task') and dependencies ('only after the think_about_whether_you_are_done call'), which adds some context. However, it doesn't describe what the tool actually does behaviorally (e.g., how it summarizes changes, what format the summary is in, whether it modifies anything, or if it's read-only). For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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 two sentences, both of which earn their place: the first states the purpose, and the second provides critical usage guidelines. It's front-loaded with the core function and avoids any redundant or unnecessary information, making it highly efficient and well-structured.

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

Completeness3/5

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

Given the complexity (a summary tool with no parameters and no output schema), the description is partially complete. It covers purpose and usage guidelines well, but lacks details on behavioral aspects (e.g., what the summary includes, how it's formatted, or if it's a read operation). Without annotations or an output schema, the description should do more to explain what the tool returns or how it behaves, leaving some contextual 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?

The input schema has 0 parameters with 100% schema description coverage, so the schema fully documents that no inputs are required. The description doesn't need to add parameter information, and it correctly doesn't mention any parameters. Since there are no parameters, the baseline is 4, as the description appropriately focuses on usage rather than parameter details.

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

Purpose4/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: 'Summarize the changes you have made to the codebase.' This is a specific verb ('summarize') and resource ('changes to the codebase'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'think_about_task_adherence' or 'think_about_whether_you_are_done' that might involve reflection on changes.

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 explicit usage guidelines: 'This tool should always be called after you have fully completed any non-trivial coding task, but only after the think_about_whether_you_are_done call.' This clearly states when to use it (after non-trivial coding tasks) and includes a prerequisite (call 'think_about_whether_you_are_done' first), offering strong guidance.

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

switch_modesC

Activates the desired modes, like ["editing", "interactive"] or ["planning", "one-shot"].

ParametersJSON Schema
NameRequiredDescriptionDefault
modesYesThe names of the modes to activate.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'Activates' modes, implying a state change, but doesn't describe what activation entails (e.g., immediate effect, persistence, side effects), permissions required, or error conditions. This is insufficient for a mutation tool with zero annotation coverage.

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 a single, efficient sentence that front-loads the core action ('Activates') and includes illustrative examples. There is no wasted text, making it easy to parse and understand quickly.

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

Completeness2/5

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

Given the complexity of a mode-switching tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., what activation does, side effects), usage context, and return values, leaving significant gaps for the agent to operate effectively.

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 description coverage is 100%, with the parameter 'modes' clearly documented as an array of strings for mode names. The description adds value by providing examples like ['editing', 'interactive'] or ['planning', 'one-shot'], which clarify the expected format and possible values, but doesn't go beyond what the schema already covers in terms of semantics.

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

Purpose4/5

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

The description clearly states the action ('Activates') and the target ('desired modes'), with specific examples provided. However, it doesn't explicitly differentiate this tool from potential sibling tools that might also manage modes or configurations, such as 'get_current_config' or 'restart_language_server', leaving some ambiguity about its unique role.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for activation, or how it relates to other tools like 'get_current_config' or 'restart_language_server', which could involve mode changes. This lack of usage context leaves the agent without clear direction.

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

think_about_collected_informationA

Think about the collected information and whether it is sufficient and relevant. This tool should ALWAYS be called after you have completed a non-trivial sequence of searching steps like find_symbol, find_referencing_symbols, search_files_for_pattern, read_file, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the tool as a cognitive evaluation step ('think about'), which implies it's a read-only, non-destructive operation that doesn't modify data. However, it lacks details on what the 'thinking' entails (e.g., internal processing vs. output generation), potential side effects, or any performance considerations. The description adds basic context but is vague on behavioral specifics.

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 concise and well-structured: two sentences that efficiently convey purpose and usage guidelines. The first sentence defines the tool's function, and the second provides critical contextual instructions. There is no wasted text, and information is front-loaded, 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.

Completeness4/5

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

Given the tool's complexity (a cognitive step with no parameters) and the absence of annotations and output schema, the description is reasonably complete. It explains what the tool does and when to use it, which is sufficient for a zero-parameter tool focused on internal evaluation. However, it could be more complete by clarifying the output or result of the 'thinking' process, as there's no output schema to guide the agent on what to expect after invocation.

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 tool has 0 parameters, with 100% schema description coverage (empty schema). The description doesn't need to explain parameters, as there are none. It appropriately focuses on usage context without redundant parameter details, earning a baseline score of 4 for zero-parameter tools that avoid unnecessary complexity.

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

Purpose4/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: to 'think about the collected information and whether it is sufficient and relevant.' It specifies a cognitive evaluation function rather than a data manipulation action, which distinguishes it from most sibling tools that perform file operations, searches, or memory management. However, it doesn't explicitly differentiate from similar cognitive tools like 'think_about_task_adherence' or 'think_about_whether_you_are_done' beyond the specific focus on 'collected information.'

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 explicit and strong usage guidelines: it states the tool 'should ALWAYS be called after you have completed a non-trivial sequence of searching steps' and lists examples like 'find_symbol, find_referencing_symbols, search_files_for_pattern, read_file, etc.' This clearly defines when to use it (after search operations) and implies when not to use it (e.g., as a standalone step or after non-search tasks), offering practical context for the agent.

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

think_about_task_adherenceA

Think about the task at hand and whether you are still on track. Especially important if the conversation has been going on for a while and there has been a lot of back and forth.

This tool should ALWAYS be called before you insert, replace, or delete code.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the tool is for 'thinking' and should be called before certain actions, but does not disclose behavioral traits such as what the tool actually does (e.g., internal reflection vs. output), whether it has side effects, or how it affects the agent's state. This leaves significant gaps in understanding its behavior.

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 front-loaded with the main purpose in the first sentence, followed by specific usage guidelines. It is appropriately sized with three sentences that each add value, though the second sentence could be slightly more concise.

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

Completeness3/5

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

Given the tool's abstract nature (a 'thinking' tool with no parameters and no output schema), the description provides basic purpose and usage guidelines. However, it lacks details on what the tool outputs or how it influences the agent's behavior, which is important for such a meta-cognitive tool. With no annotations or output schema, the description is adequate but has clear gaps in explaining the tool's effect.

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 tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description does not need to add parameter semantics, and it appropriately avoids discussing parameters, meeting the baseline for a parameterless tool.

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

Purpose3/5

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

The description states the tool is for 'thinking about the task at hand and whether you are still on track', which provides a vague purpose. It does not specify a concrete action or resource, and while it distinguishes from siblings by being a 'thinking' tool, the purpose remains abstract rather than specific.

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 explicitly states when to use this tool: 'Especially important if the conversation has been going on for a while' and 'ALWAYS be called before you insert, replace, or delete code.' It provides clear context and exclusions, distinguishing it from other tools by specifying prerequisites for code modification actions.

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

think_about_whether_you_are_doneC

Whenever you feel that you are done with what the user has asked for, it is important to call this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.5/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden. It fails to disclose any behavioral traits such as what the tool returns, whether it has side effects, or how it influences the agent's workflow. The description is minimal and does not add meaningful context beyond the vague purpose.

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 a single, concise sentence that is front-loaded with the main instruction. It avoids redundancy and is appropriately sized for a tool with no parameters, though it could be slightly more informative without losing efficiency.

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

Completeness2/5

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

Given the tool's complexity (low, with 0 params) but lack of annotations and output schema, the description is incomplete. It does not explain what happens after calling the tool (e.g., does it return a status, trigger an action, or provide feedback?), leaving significant gaps in understanding its role in the workflow.

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 tool has 0 parameters, and schema description coverage is 100%, so there is no need for parameter details in the description. The baseline for 0 parameters is 4, as the description does not need to compensate for missing param info, and it appropriately avoids unnecessary parameter discussion.

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

Purpose2/5

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

The description states the tool should be called 'whenever you feel that you are done with what the user has asked for,' which is a tautology of the tool name 'think_about_whether_you_are_done.' It does not specify what the tool actually does (e.g., triggers a completion check, logs status, or returns a decision). The purpose is vague and lacks a clear verb+resource distinction.

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

Usage Guidelines3/5

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

The description provides implied usage by stating 'whenever you feel that you are done,' which gives some context for when to call it. However, it does not explicitly differentiate from sibling tools (e.g., 'think_about_collected_information' or 'think_about_task_adherence') or specify alternatives, leaving gaps in guidance.

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

write_memoryA

Write some information about this project that can be useful for future tasks to a memory. Use markdown formatting for the content. The information should be short and to the point. The memory name should be meaningful, such that from the name you can infer what the information is about. It is better to have multiple small memories than to have a single large one because memories will be read one by one and we only ever want to read relevant memories.

This tool is either called during the onboarding process or when you have identified something worth remembering about the project from the past conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_nameYes
contentYes
max_answer_charsNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses behavioral traits like using markdown formatting, keeping content short, and preferring multiple small memories over large ones. However, it doesn't cover important aspects like whether this is a destructive operation (though implied by 'write'), error conditions, or what happens on success/failure.

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 appropriately sized and front-loaded with the core purpose. However, it includes some redundancy (e.g., explaining why multiple small memories are better could be more concise) and the final sentence about usage scenarios could be integrated more smoothly.

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

Completeness3/5

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

Given no annotations, no output schema, and 3 parameters with 0% schema coverage, the description provides reasonable context for a write operation but has significant gaps. It covers purpose and usage guidelines well, but lacks details about return values, error handling, and complete parameter documentation, making it incomplete for reliable tool invocation.

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

Parameters2/5

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

With 0% schema description coverage and 3 parameters, the description adds minimal semantic value. It mentions 'memory_name' should be meaningful and 'content' should use markdown, but doesn't explain 'max_answer_chars' at all. The description doesn't adequately compensate for the schema's lack of parameter documentation.

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

Purpose4/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: 'Write some information about this project that can be useful for future tasks to a memory.' It specifies the verb ('write'), resource ('memory'), and content type ('information about this project'), though it doesn't explicitly differentiate from sibling tools like 'read_memory' or 'delete_memory' beyond the obvious action difference.

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 explicit guidance on when to use this tool: 'This tool is either called during the onboarding process or when you have identified something worth remembering about the project from the past conversation.' It clearly defines two specific scenarios for usage, though it doesn't mention alternatives or exclusions.

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. 33 tool updates
    • First observedactivate_project
    • First observedcheck_onboarding_performed
    • First observedcreate_text_file
    • First observeddelete_lines
    • First observeddelete_memory
    • First observedexecute_shell_command
    • First observedfind_file
    • First observedfind_referencing_symbols
    • First observedfind_symbol
    • First observedget_current_config
    • First observedget_symbols_overview
    • First observedinitial_instructions
    • First observedinsert_after_symbol
    • First observedinsert_at_line
    • First observedinsert_before_symbol
    • First observedlist_dir
    • First observedlist_memories
    • First observedonboarding
    • First observedprepare_for_new_conversation
    • First observedread_file
    • First observedread_memory
    • First observedremove_project
    • First observedreplace_lines
    • First observedreplace_regex
    • First observedreplace_symbol_body
    • First observedrestart_language_server
    • First observedsearch_for_pattern
    • First observedsummarize_changes
    • First observedswitch_modes
    • First observedthink_about_collected_information
    • First observedthink_about_task_adherence
    • First observedthink_about_whether_you_are_done
    • First observedwrite_memory

TDQS

B3.4/5.0
Disambiguation3/5

The tool set has clear distinctions for core operations like file editing and symbol manipulation, but there is significant overlap in search and reading tools (e.g., find_symbol, search_for_pattern, read_file) that could cause confusion. Additionally, multiple 'think about' tools have very similar purposes, making it hard for an agent to choose the right one without careful reading of descriptions.

Naming Consistency4/5

Most tools follow a consistent verb_noun or verb_preposition_noun pattern (e.g., create_text_file, delete_lines, insert_after_symbol), which is predictable. However, there are minor deviations like 'get_current_config' (verb_adjective_noun) and 'onboarding' (noun-only), slightly breaking the pattern but not severely impacting readability.

Tool Count2/5

With 33 tools, the count is excessive for a coding assistant server, leading to cognitive overload and potential redundancy. Many tools could be consolidated (e.g., multiple 'think about' tools) without losing functionality, making the set feel bloated and difficult to navigate efficiently.

Completeness5/5

The tool set comprehensively covers the domain of code project management, including project activation, file operations (create, read, edit, delete), symbol manipulation, memory handling, and reflective tools for task adherence. There are no obvious gaps; it supports full CRUD and lifecycle workflows for coding tasks.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides LLM Agents with AI-powered mentorship for code review, design critique, writing feedback, and brainstorming using the Deepseek API, enabling enhanced output in various development and strategic planning tasks.
    5
    31
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A local vector database system that provides LLM coding agents with fast, efficient semantic search capabilities for software projects via the Message Control Protocol.
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A fully featured coding agent that uses symbolic operations (enabled by language servers) and works well even in large code bases. Essentially a free to use alternative to Cursor and Windsurf Agents, Cline, Roo Code and others.
    29
    28,830
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Unleashes LLM-powered agents to autonomously execute and debug web apps directly in your code editor, with features like webapp navigation, network traffic capture, and console error collection.
    2
    1,240
    Apache 2.0

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/lin2000wl/Serena-cursor-mcp'

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