Skip to main content
Glama
  • :rocket: Serena는 LLM을 코드베이스에서 직접 작동하는 모든 기능을 갖춘 에이전트로 전환할 수 있는 강력한 코딩 에이전트 툴킷 입니다.

  • :wrench: Serena는 IDE의 기능과 유사한 필수적인 의미 코드 검색 및 편집 도구를 제공하며, 심볼 수준에서 코드 엔터티를 추출하고 관계적 구조를 활용합니다.

  • :free: Serena는 무료이며 오픈 소스로 , 이미 무료로 이용할 수 있는 LLM의 역량을 향상시킵니다.

데모

Serena가 Claude Desktop을 사용하여 간단한 기능(더 나은 로그 GUI)을 구현하는 모습을 보여줍니다. Serena의 도구를 사용하여 Claude가 원하는 기호를 찾고 편집하는 방법을 살펴보세요.

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

LLM 통합

Serena는 워크플로 코딩에 필요한 도구를 제공하지만, 도구 사용을 조율하는 실제 작업을 수행하려면 LLM이 필요합니다.

Serena는 여러 가지 방법으로 LLM과 통합될 수 있습니다.

  • 모델 컨텍스트 프로토콜(MCP)을 사용하여.
    Serena는 다음과 통합되는 MCP 서버를 제공합니다.

  • 모델에 독립적인 에이전트 프레임워크인 Agno를 사용합니다.
    Serena의 Agno 기반 에이전트를 사용하면 Google, OpenAI 또는 Anthropic(유료 API 키 사용)에서 제공하는 것이든 Ollama, Together 또는 Anyscale에서 제공하는 무료 모델이든 사실상 모든 LLM을 코딩 에이전트로 전환할 수 있습니다.

  • Serena의 도구를 원하는 에이전트 프레임워크에 통합하여 사용할 수 있습니다.
    Serena의 도구 구현은 프레임워크별 코드와 분리되어 있으므로 모든 에이전트 프레임워크에 쉽게 적용될 수 있습니다.

프로그래밍 언어 지원 및 의미 분석 기능

Serena의 시맨틱 코드 분석 기능은 널리 구현된 언어 서버 프로토콜(LSP)을 사용하는 언어 서버를 기반으로 합니다. LSP는 코드의 기호적 이해를 기반으로 다양한 코드 쿼리 및 편집 기능을 제공합니다. 이러한 기능을 갖춘 Serena는 마치 IDE 기능을 활용하는 숙련된 개발자처럼 코드를 검색하고 편집합니다. Serena는 매우 크고 복잡한 프로젝트에서도 효율적으로 적절한 컨텍스트를 찾고 필요한 작업을 수행할 수 있습니다! 따라서 무료 오픈 소스일 뿐만 아니라, 기존 유료 솔루션보다 더 나은 결과를 얻는 경우가 많습니다.

언어 서버는 다양한 프로그래밍 언어를 지원합니다. Serena를 사용하면

  • 다음에 대한 직접적이고 즉각적인 지원:

    • 파이썬

    • 타입스크립트/자바스크립트

    • 박사

    • Go (먼저 go와 gopls를 설치해야 함)

    • 씨/씨++

    • Java( 참고 : 시작이 느립니다. 특히 초기 시작이 느립니다. macOS에서는 Java에 문제가 있는 것 같습니다.)

  • 간접 지원(일부 코드 변경/수동 설치가 필요할 수 있음):

    • 루비(테스트되지 않음)

    • C# (테스트되지 않음)

    • Kotlin(테스트되지 않음)

    • 다트(테스트 안됨)

    이러한 언어는 Serena가 내부적으로 사용하는 언어 서버 라이브러리 multilspy 에서 지원됩니다. 하지만 이러한 언어 지원이 실제로 작동하는지 명시적으로 테스트하지는 않았습니다.

원칙적으로 새로운 언어 서버 구현을 위한 얕은 어댑터를 제공하면 추가 언어도 쉽게 지원할 수 있습니다.

목차

Related MCP server: Nabu + Nisaba

세레나를 어디에 활용할 수 있나요?

Serena는 분석, 계획, 새로운 구성 요소 설계 또는 기존 구성 요소 리팩토링 등 모든 코딩 작업에 사용할 수 있습니다. Serena 도구를 사용하면 LLM이 인지적 인식-행동 루프를 완성할 수 있으므로, Serena 기반 에이전트는 초기 분석부터 구현, 테스트, 그리고 최종적으로 버전 제어 시스템 커밋까지 코딩 작업을 처음부터 끝까지 자율적으로 수행할 수 있습니다.

Serena는 코드를 읽고, 쓰고, 실행할 수 있으며, 로그와 터미널 출력을 읽을 수 있습니다. 권장하지는 않지만, "바이브 코딩"은 충분히 가능하며, "코드가 더 이상 존재하지 않는" 느낌을 원한다면 IDE 내부의 에이전트보다 Serena가 바이브 코딩에 더 적합하다는 것을 알게 될 것입니다. (별도의 GUI를 통해 완전히 잊을 수 있기 때문입니다.)

세레나와 함께하는 무료 코딩 에이전트

Anthropic의 Claude 무료 버전도 MCP 서버를 지원하므로 Serena를 Claude와 함께 무료로 사용할 수 있습니다. MCP 서버 지원이 추가되면 ChatGPT Desktop에서도 곧 동일한 기능을 사용할 수 있을 것으로 예상됩니다.
Agno를 사용하면 Serena를 자유/자유 중량 모델과 함께 사용할 수도 있습니다.

Serena는 Oraios AI가 개발자 커뮤니티에 기여한 결과입니다.
우리도 정기적으로 이를 사용하고 있습니다.

Windsurf나 Cursor 같은 여러 IDE 기반 구독료를 내야 해서 기존 채팅 구독료에 추가로 토큰을 구매해야 하는 상황에 지쳐버렸습니다. Claude Code, Cline, Aider 등 API 기반 도구들이 부담하는 상당한 API 비용도 마찬가지로 매력적이지 않았습니다. 그래서 Serena를 개발할 때는 다른 대부분의 구독은 취소할 수 있도록 했습니다.

빠른 시작

Serena는 다양한 방법으로 사용할 수 있습니다. 아래에서 선택한 통합에 대한 지침을 확인할 수 있습니다.

  • Claude를 무료로 사용할 수 있는 코딩 에이전트로 바꾸고 싶다면 Claude Desktop을 통해 Serena를 사용하는 것이 좋습니다.

  • Gemini나 다른 모델을 사용하면서 GUI 환경을 원한다면 Agno를 사용하세요. macOS에서는 goose 의 GUI를 사용할 수도 있습니다.

  • CLI를 통해 Serena를 사용하는 것을 선호한다면 goose를 사용할 수 있습니다. goose에서도 거의 모든 모델이 가능합니다.

  • IDE에 통합된 Serena를 사용하려면 다른 MCP 클라이언트 섹션을 참조하세요.

설정 및 구성

  1. uv 설치 (지침은 여기를 참조하세요 )

  2. 저장소를 /path/to/serena 로 복제합니다.

  3. serena_config.template.yml``serena_config.yml 로 복사하고 설정을 조정합니다.

    지엑스피1

  4. project.template.yml``project.yml 로 복사하고 프로젝트에 맞게 설정을 조정하세요(Serena가 작업할 각 프로젝트마다 해당 파일을 하나씩 추가하세요). 프로젝트의 .serena 디렉터리에 복사하는 것이 좋습니다(예:

    mkdir -p /myproject/.serena
    cp project.template.yml /myproject/.serena/project.yml
  5. Serena가 프로젝트 간에 동적으로 전환하도록 하려면 이전 단계에서 만든 모든 프로젝트 파일 목록을 serena_config.ymlprojects 목록에 추가합니다.

⚠️ 참고: Serena는 현재 활발하게 개발 중입니다. 지속적으로 기능을 추가하고 안정성과 UX를 개선하고 있습니다. 따라서 구성이 제대로 작동하지 않을 수 있습니다. 구성이 올바르지 않으면 MCP 서버 또는 Serena 기반 에이전트가 시작되지 않을 수 있습니다(이 경우 MCP 로그를 확인하세요). Serena를 업데이트할 때 변경 로그 와 구성 템플릿을 확인하고 구성을 적절히 수정하세요.

초기 설정 후 Serena를 사용하고 싶은 방식에 따라 아래 섹션 중 하나를 계속 진행하세요.

MCP 서버(Claude Desktop)

  1. myproject.template.yml 의 템플릿을 기반으로 프로젝트에 대한 구성 파일(예: myproject.yml 을 만듭니다.

  2. 클라이언트에서 MCP 서버를 구성합니다.
    Claude Desktop (Windows 및 macOS에서 사용 가능)의 경우, 파일 / 설정 / 개발자 / MCP 서버 / 구성 편집으로 이동하면 JSON 파일 claude_desktop_config.json 열 수 있습니다. Serena를 활성화하려면 다음 내용을 추가하세요(경로를 수정하여).

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

    :info: 구성에서 enable_project_activation 설정한 경우 프로젝트 파일을 전달하는 것은 선택 사항입니다. 이 설정을 사용하면 Claude에게 작업하려는 프로젝트를 활성화하도록 간단히 지시할 수 있습니다.

    • Claude Desktop (위 그림 참조)의 경우, Serena의 기본 컨텍스트( desktop-app )와 모드(예: interactive , editing )는 일반적으로 일반적인 용도에 적합합니다. 기본값을 재정의하려는 경우가 아니면 args 에 명시적으로 지정할 필요는 없습니다.

    • IDE 통합 (VSCode, Cursor, Cline 등 Serena를 MCP 서버로 추가하여 구성)의 경우, MCP 클라이언트 구성의 args"--context", "ide-assistant" 추가하여 ide-assistant 컨텍스트를 명시적으로 전달해야 합니다 . 원하는 경우 초기 모드를 지정할 수도 있습니다(예: "--mode", "editing" ).

    • 모든 클라이언트에서 특정 원샷 작업을 수행하는 경우(예: 단일 상호작용에서 보고서나 계획을 생성하는 경우), Serena가 연결되면 switch_modes 도구를 사용하여 planningone-shot 같은 모드로 전환하도록 지시할 수 있습니다. 또는 이러한 작업에 대해 서버 실행 명령을 직접 구성하는 경우 --mode 플래그를 통해 처음에 이러한 모드를 설정할 수 있습니다.

    사용 가능한 옵션과 사용자 정의에 대한 자세한 내용은 모드 및 컨텍스트 섹션을 참조하세요.

    Windows에서 경로에 백슬래시를 포함하는 경로를 사용하는 경우(슬래시만 사용할 수도 있음) 반드시 올바른 방법으로 이스케이프( \\ )해야 합니다.

이제 끝났습니다! 설정을 저장한 후 Claude Desktop을 다시 시작하세요.

문제 해결

일부 클라이언트/OS/설정 구성에서 Serena를 표준 stdio 프로토콜로 사용할 때 문제가 발생하는 것으로 보고되었습니다. 이 경우 MCP 서버가 클라이언트 애플리케이션에서 시작됩니다. 이러한 문제가 발생하는 경우, 다음을 실행하여 Serena를 sse 모드로 시작할 수 있습니다.

uv run --directory /path/to/serena serena-mcp-server --transport sse --port 9121 --project /path/to/project

( --project 옵션은 선택 사항입니다.) 그런 다음 클라이언트가 http://localhost:9121 에 연결되도록 구성하세요.

참고: Windows 및 macOS에는 Anthropic의 공식 Claude Desktop 애플리케이션이 있고, Linux에는 오픈 소스 커뮤니티 버전이 있습니다.

⚠️ Claude Desktop 애플리케이션을 완전히 종료해야 합니다. Claude를 닫으면 시스템 트레이로 최소화됩니다. 최소한 Windows에서는 그렇습니다.

재시작 후 채팅 인터페이스에 Serena의 도구가 표시되어야 합니다(작은 망치 아이콘에 주목하세요).

⚠️ 도구 이름: Claude Desktop(및 대부분의 MCP 클라이언트)은 서버 이름을 확인하지 않습니다. 따라서 "Serena의 도구를 사용하세요"와 같은 명령은 사용하지 마세요. 대신, LLM에 심볼릭 도구를 사용하거나 도구 이름을 참조하여 특정 도구를 사용하도록 지시할 수 있습니다. 또한, 여러 MCP 서버를 사용하는 경우 도구 이름 충돌이 발생하여 정의되지 않은 동작이 발생할 수 있습니다. 예를 들어, Serena는 현재 도구 이름 충돌로 인해 파일 시스템 MCP 서버 와 호환되지 않습니다.

ℹ️ stdio를 프로토콜로 사용하는 MCP 서버는 클라이언트/서버 아키텍처 측면에서 다소 특이합니다. 서버의 표준 입출력 스트림을 통해 통신하려면 클라이언트가 서버를 반드시 시작해야 하기 때문입니다. 즉, 서버를 직접 시작할 필요가 없습니다. 클라이언트 애플리케이션(예: Claude Desktop)이 이 작업을 처리하므로 실행 명령을 사용하여 구성해야 합니다.

Claude Desktop을 사용하는 MCP 서버에 대한 자세한 내용은 공식 빠른 시작 가이드를 참조하세요.

클로드 코드

Serena는 Claude Code를 더 저렴하고 강력하게 만드는 훌륭한 방법입니다! 저희는 이에 대한 여러 사례를 수집하고 있으며 지금까지 매우 긍정적인 피드백을 받았습니다. Claude Code 사용자는 Serena를 다음과 같이 추가할 수 있습니다.

claude mcp add serena -- /path/to/uv "run" --directory /path/to/serena serena-mcp-server --project-file /path/to/project

기타 MCP 클라이언트 - Cline, Roo-Code, Cursor, Windsurf 등

Serena는 MCP 서버이므로 모든 MCP 클라이언트에 포함될 수 있습니다. 위와 동일한 구성을 사용하되, 클라이언트별로 약간의 수정을 가하면 작동할 것입니다. 대부분의 기존 코딩 어시스턴트(IDE 확장 프로그램 또는 VSCode 유사 IDE)는 MCP 서버 연결을 지원합니다. 이러한 통합에는 MCP 클라이언트 구성의 args"--context", "ide-assistant" 추가하여 ** ide-assistant 컨텍스트를 사용하는 것이 좋습니다**. Serena를 포함하면 일반적으로 심볼릭 연산 도구를 제공하여 성능이 향상됩니다.

이 경우, 사용료 청구는 Claude Desktop 클라이언트와 달리 선택한 클라이언트에서 계속 관리합니다. 하지만 다음과 같은 이유로 Serena를 이러한 방식으로 계속 사용하고 싶을 수도 있습니다.

  1. 여러분은 이미 코딩 어시스턴트(예: Cline 또는 Cursor)를 사용하고 있으며, 이를 더욱 강력하게 만들고 싶어합니다.

  2. Linux를 사용하고 있으며 커뮤니티에서 만든 Claude Desktop을 사용하고 싶지 않습니다.

  3. 귀하는 Serena를 IDE에 더욱 긴밀하게 통합하고 싶어하며 이에 대한 비용을 지불하는 것을 꺼리지 않습니다.

Claude Desktop에서 Serena를 사용할 때와 동일한 고려 사항(특히 도구 이름 충돌)이 여기에도 적용됩니다.

코딩을 위한 AI 상호작용이 내장된 IDE 또는 확장 프로그램(사실 모든 기능이 그렇습니다)에서 Serena의 모든 도구 세트를 사용하는 경우, 사용자가 제어할 수 없는 클라이언트 내부 도구와의 원치 않는 상호작용이 발생할 수 있습니다. 특히 편집 도구의 경우, 이러한 문제가 발생할 수 있으므로 비활성화하는 것이 좋습니다. 다양한 인기 클라이언트에서 Serena를 사용하는 경험이 쌓일수록, 원활한 경험을 위한 모범 사례를 수집하고 개선해 나갈 것입니다.

거위

goose 는 MCP 서버 통합 기능을 갖춘 독립형 코딩 에이전트로, CLI(macOS에서는 GUI 포함)를 제공합니다. goose를 사용하는 것은 현재 원하는 LLM을 사용하여 CLI를 통해 Serena를 실행하는 가장 간단한 방법입니다.

여기의 지침에 따라 설치하세요.

그런 다음 goose configure 사용하여 확장 프로그램을 추가합니다. Serena를 추가하려면 Command-line Extension 옵션을 선택하고 이름을 Serena 로 지정한 후 다음을 명령으로 추가합니다.

/abs/path/to/uv run --directory /abs/path/to/serena serena-mcp-server --project /optional/abs/path/to/project

Serena는 필요한 모든 편집 및 명령 작업을 수행할 수 있으므로 Goose가 기본적으로 활성화하는 developer 확장 프로그램을 비활성화해야 합니다.

goose configure

다시 한 번, Toggle Extensions 옵션을 선택하고 Serena가 선택되어 있고 developer 선택되어 있지 않은지 확인하세요.

이게 전부입니다. Goose의 구성 옵션을 자세히 살펴보고 무엇을 할 수 있는지 확인해 보세요(도구 실행에 대한 다양한 권한 수준을 설정하는 등 다양한 기능이 있습니다).

Goose가 세션 종료 시 MCP 서버의 Python 프로세스를 항상 제대로 종료하지 않는 것 같습니다. Goose 작업을 마친 후 Serena GUI를 비활성화하거나 실행 중인 Python 프로세스를 수동으로 정리하는 것이 좋습니다.

아그노 에이전트

Agno는 모델에 구애받지 않는 에이전트 프레임워크로, Serena를 MCP 기술과 무관하게 다수의 기본 LLM을 가진 에이전트로 전환할 수 있도록 합니다. Agno는 현재 Serena를 채팅 GUI에서 원하는 LLM으로 실행하는 가장 간단한 방법입니다(Mac을 사용하는 경우 설정이 거의 필요 없는 Goose를 선호할 수 있습니다).

Agno는 아직 완전히 안정적이지는 않지만, 자체 오픈 소스 UI를 제공하여 채팅 인터페이스를 통해 에이전트를 직접 사용하기 편리하기 때문에 선택했습니다. Agno를 사용하면 Serena가 에이전트로 전환되어(더 이상 MCP 서버가 아님) 프로그래밍 방식(예: 벤치마킹 또는 애플리케이션 내에서)으로 사용할 수 있습니다.

작동 원리는 다음과 같습니다( Agno의 문서 도 참조하세요).

  1. npx로 agent-ui 코드 다운로드

    npx create-agent-ui@latest

    또는 수동으로 복제할 수도 있습니다.

    git clone https://github.com/agno-agi/agent-ui.git
    cd agent-ui 
    pnpm install 
    pnpm dev
  2. 선택 사항인 Serena를 설치하세요:

    # You can also only select agno,google or agno,anthropic instead of all-extras
    uv pip install --all-extras -r pyproject.toml -e .
  3. .env.example``.env 로 복사하고 사용하려는 공급자에 대한 API 키를 입력합니다.

  4. agno agent 앱을 시작하세요

    uv run python scripts/agno_agent.py

    기본적으로 스크립트는 Claude를 모델로 사용하지만 Agno가 지원하는 모델(기본적으로 기존 모델)을 선택할 수 있습니다.

  5. 새 터미널에서 agno UI를 시작합니다.

    cd agent-ui 
    pnpm dev

    위에서 시작한 에이전트에 UI를 연결하고 채팅을 시작하세요. MCP 서버 버전과 동일한 도구를 사용할 수 있습니다.

다음은 Serena가 최신 Gemini 모델을 사용하여 간단한 분석 작업을 수행하는 짧은 데모입니다.

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

⚠️ 중요: MCP 서버 방식과 달리 Agno UI의 도구 실행은 사용자의 권한을 요청하지 않습니다. 셸 도구는 임의 코드 실행이 가능하기 때문에 특히 중요합니다. Claude를 사용한 테스트에서는 이 부분에서 문제가 발생한 적이 없지만, 이를 허용하는 것이 완전히 안전하지는 않을 수 있습니다. Serena 프로젝트의 구성 파일( .yml )에서 특정 도구를 비활성화하도록 설정할 수 있습니다.

기타 에이전트 프레임워크

Agno 에이전트는 Agno UI 덕분에 특히 훌륭하지만, Serena는 어떤 에이전트 프레임워크(예: pydantic-ai , langgraph 등)에나 쉽게 통합할 수 있습니다.

SerenaAgnoToolkit 에서 agno를 위해 우리가 한 것처럼, Serena의 도구를 원하는 프레임워크의 도구에 어댑터로 작성하기만 하면 됩니다.

세레나의 도구 및 구성

Serena는 의미론적 코드 검색 도구와 편집 기능, 그리고 셸 실행 기능을 결합합니다. Serena의 동작은 모드와 컨텍스트를 통해 더욱 세부적으로 사용자 정의할 수 있습니다. 전체 도구 목록은 아래에서 확인하세요.

일반적으로 모든 도구를 사용하는 것이 좋습니다. 이렇게 하면 Serena가 가장 큰 가치를 제공할 수 있기 때문입니다. 셸 명령(특히 테스트)을 실행해야만 Serena가 자율적으로 실수를 식별하고 수정할 수 있습니다.

하지만 execute_shell_command 도구는 임의 코드 실행을 허용한다는 점에 유의해야 합니다. Serena를 MCP 서버로 사용할 경우, 클라이언트는 일반적으로 도구를 실행하기 전에 사용자에게 권한을 요청하므로, 사용자가 실행 매개변수를 미리 확인한다면 문제가 되지 않습니다. 하지만 문제가 발생할 수 있으므로 프로젝트의 .yml 구성 파일에서 특정 명령을 비활성화할 수 있습니다. Serena를 코드베이스 수정 없이 코드 분석 및 구현 제안 용도로만 사용하려면 프로젝트 구성 파일에서 read_only: true 설정하여 읽기 전용 모드를 활성화할 수 있습니다. 이렇게 하면 모든 편집 도구가 자동으로 비활성화되고 코드베이스 수정은 방지되지만 모든 분석 및 탐색 기능은 계속 사용할 수 있습니다.

일반적으로 작업 내용을 백업하고 버전 제어 시스템을 사용하여 작업 내용이 손실되는 것을 방지하세요.

다른 코딩 에이전트와의 비교

저희가 아는 바로는 Serena는 모든 기능을 MCP 서버를 통해 사용할 수 있는 최초의 모든 기능을 갖춘 코딩 에이전트로, API 키나 구독이 필요하지 않습니다.

구독 기반 코딩 에이전트

가장 눈에 띄는 구독 기반 코딩 에이전트는 Windsurf, Cursor, VSCode와 같은 IDE에 포함되어 있습니다. Serena의 기능은 Cursor의 Agent, Windsurf의 Cascade, 그리고 곧 출시될 VSCode의 Agent 모드 와 유사합니다.

Serena는 구독이 필요하지 않다는 장점이 있습니다. 하지만 IDE에 직접 통합되어 있지 않아 새로 작성된 코드를 원활하게 검토하기 어렵다는 단점이 있습니다.

더 기술적인 차이점은 다음과 같습니다.

  • Serena는 특정 IDE에 종속되지 않습니다. Serena의 MCP 서버는 모든 MCP 클라이언트(일부 IDE 포함)와 함께 사용할 수 있으며, Agno 기반 에이전트는 해당 기능을 적용하는 추가적인 방법을 제공합니다.

  • Serena는 특정 대규모 언어 모델이나 API에 구속되지 않습니다.

  • Serena는 언어 서버를 사용하여 코드를 탐색하고 편집하므로 코드를 기호적으로 이해할 수 있습니다. IDE 기반 도구는 종종 RAG 기반 또는 순수 텍스트 기반 접근 방식을 사용하는데, 이는 특히 대규모 코드베이스의 경우 성능이 떨어지는 경우가 많습니다.

  • 세레나는 오픈 소스이고 코드베이스가 작기 때문에 쉽게 확장하고 수정할 수 있습니다.

API 기반 코딩 에이전트

구독 기반 에이전트의 대안으로 Claude Code, Cline, Aider, Roo Code 등과 같은 API 기반 에이전트가 있습니다. 이러한 에이전트의 사용 비용은 기본 LLM의 API 비용에 직접 매핑됩니다. 일부 에이전트(Cline 등)는 IDE에 확장 기능으로 포함될 수도 있습니다. 이러한 에이전트는 종종 매우 강력하지만, 주요 단점은 (잠재적으로 매우 높은) API 비용입니다.

Serena 자체는 API 기반 에이전트로 사용할 수 있습니다(위의 Agno 섹션 참조). 아직 Serena용 CLI 도구나 전용 IDE 확장 기능은 개발하지 않았습니다(Serena는 이미 MCP 서버를 지원하는 모든 IDE에서 사용할 수 있으므로, 후자는 필요하지 않을 것으로 예상됩니다). Claude Code처럼 Serena를 CLI 도구로 사용해야 한다는 수요가 있다면, 개발도 고려해 볼 것입니다.

Serena와 다른 API 기반 에이전트의 주요 차이점은 Serena를 MCP 서버로도 사용할 수 있다는 것입니다. 따라서 API 키가 필요 없고 API 비용도 발생하지 않습니다. 이는 Serena만의 고유한 기능입니다.

기타 MCP 기반 코딩 에이전트

DesktopCommandercodemcp 처럼 코딩용으로 설계된 다른 MCP 서버도 있습니다. 하지만 저희가 아는 한, 이러한 서버는 시맨틱 코드 검색 및 편집 도구를 제공하지 않으며, 순전히 텍스트 기반 분석에만 의존합니다. Serena는 언어 서버와 MCP의 통합을 통해 특히 대규모 코드베이스 환경에서 까다로운 코딩 작업에 매우 강력하고 독보적인 기능을 제공합니다.

온보딩과 기억

기본적으로 Serena는 프로젝트 시작 시 온보딩 프로세스를 진행합니다. 이 프로세스의 목표는 Serena가 프로젝트에 익숙해지고 기억을 저장하여 향후 상호작용에 활용할 수 있도록 하는 것입니다.

메모리는 프로젝트 디렉터리의 .serena/memories/ 에 저장된 파일로, 에이전트가 선택하여 읽을 수 있습니다. 필요에 따라 자유롭게 읽고 수정할 수 있으며, 새 메모리를 직접 추가할 수도 있습니다. .serena/memories/ 디렉터리의 모든 파일은 메모리 파일입니다.

세레나의 사용자 경험이 메모리를 통해 크게 향상되는 것을 확인했습니다. 세레나는 그 자체로 필요할 때마다 새로운 메모리를 생성하도록 설계되었습니다.

모드와 컨텍스트

Serena의 동작과 도구 세트는 컨텍스트모드를 사용하여 조정할 수 있습니다. 이를 통해 워크플로와 Serena가 작동하는 환경에 가장 적합하도록 고도의 사용자 정의가 가능합니다.

맥락

컨텍스트는 Serena가 작동하는 일반적인 환경을 정의합니다. 초기 시스템 프롬프트와 사용 가능한 도구 세트에 영향을 미칩니다. 컨텍스트는 Serena를 시작할 때(예: MCP 서버의 CLI 옵션 또는 에이전트 스크립트) 설정되며, 활성 세션 중에는 변경할 수 없습니다.

Serena에는 미리 정의된 컨텍스트가 제공됩니다.

  • desktop-app : Claude Desktop과 같은 데스크톱 애플리케이션에 맞게 설계되었습니다. 일반적으로 기본값으로 설정됩니다.

  • agent : Serena가 보다 자율적인 에이전트 역할을 하는 시나리오(예: Agno와 함께 사용되는 경우)에 맞게 설계되었습니다.

  • ide-assistant : VSCode, Cursor, Cline 등의 IDE와의 통합을 위해 최적화되었으며, 편집기 내 코딩 지원에 중점을 둡니다.

통합에 가장 적합한 컨텍스트를 선택해야 합니다.

모드

모드는 특정 유형의 작업이나 상호작용 스타일에 맞춰 Serena의 동작을 더욱 세부적으로 조정합니다. 여러 모드를 동시에 활성화하여 효과를 조합할 수 있습니다. 모드는 시스템 프롬프트에 영향을 미치며, 특정 도구를 제외하여 사용 가능한 도구 세트를 변경할 수도 있습니다.

내장 모드의 예는 다음과 같습니다.

  • planning : 세레나는 계획 및 분석 작업에 집중합니다.

  • editing : Serena를 직접 코드 수정 작업에 최적화합니다.

  • interactive : 대화형, 양방향 상호작용 스타일에 적합합니다.

  • one-shot : 단일 응답으로 완료해야 하는 작업을 위해 Serena를 구성하며, 종종 보고서나 초기 계획을 생성하는 planning 과 함께 사용됩니다.

  • no-onboarding : 특정 세션에 필요하지 않으면 초기 온보딩 프로세스를 건너뜁니다.

  • onboarding : (일반적으로 자동으로 실행됨) 프로젝트 온보딩 프로세스에 초점을 맞춥니다.

모드는 시작 시 설정할 수 있지만(컨텍스트와 유사), 세션 중에 동적으로 전환 할 수도 있습니다. LLM이 switch_modes 도구를 사용하여 다른 모드 세트(예: "계획 및 원샷 모드로 전환")를 활성화하도록 지시할 수 있습니다.

:warning: 모드 호환성 : 모드를 결합할 수는 있지만, 일부 모드는 의미적으로 호환되지 않을 수 있습니다(예: interactiveone-shot ). Serena는 현재 호환되지 않는 모드 조합을 방지하지 않습니다. 따라서 사용자가 적절한 모드 구성을 선택해야 합니다.

컨텍스트 및 모드 사용자 정의

Serena를 사용자의 필요에 맞게 정확하게 조정하기 위해 고유한 컨텍스트와 모드를 만들 수 있습니다.

  1. Serena 클론에 추가 : 로컬 Serena 저장소의 config/contexts/ 또는 config/modes/ 디렉터리에 새 .yml 파일을 생성합니다. 이러한 사용자 지정 컨텍스트/모드는 자동으로 등록되어 파일 이름( .yml 확장자 제외)으로 사용할 수 있습니다. 또한 사용 가능한 컨텍스트/모드 목록에도 표시됩니다.

  2. 외부 YAML 파일 사용 : Serena를 시작할 때 컨텍스트나 모드에 대한 사용자 정의 .yml 파일에 대한 절대 경로를 제공할 수 있습니다.

컨텍스트 또는 모드 YAML 파일은 일반적으로 다음을 정의합니다.

  • name : (파일 이름을 사용하는 경우 선택 사항) 컨텍스트/모드의 이름입니다.

  • prompt : Serena의 시스템 프롬프트에 통합될 문자열입니다.

  • description : (선택 사항) 간략한 설명입니다.

  • excluded_tools : 이 컨텍스트/모드가 활성화되면 비활성화할 도구 이름(문자열) 목록입니다.

이러한 맞춤화를 통해 Serena를 특정 프로젝트 요구 사항이나 개인적 선호도에 맞춰 긴밀하게 통합하고 조정할 수 있습니다.

다른 MCP 서버와의 결합

MCP 클라이언트를 통해 Serena를 사용할 경우 다른 MCP 서버와 함께 사용할 수 있습니다. 단, 도구 이름 충돌에 주의하세요! 위 정보를 참조하세요.

현재 널리 사용되는 파일 시스템 MCP 서버와 충돌이 발생하고 있습니다. Serena도 파일 시스템 작업을 제공하므로 두 서버를 동시에 활성화할 필요는 거의 없습니다.

Serena 사용에 대한 권장 사항

Serena 커뮤니티가 성장함에 따라 앞으로도 모범 사례를 지속적으로 수집할 예정입니다. Serena를 내부적으로 사용하면서 얻은 교훈을 간략하게 요약해 보겠습니다.

이러한 권장 사항의 대부분은 위에 언급된 모든 에이전트를 포함한 모든 코딩 에이전트에 해당합니다.

어떤 모델을 선택해야 할까?

놀랍게도 Serena는 Claude 3.7의 생각하는 버전(아직 Gemini와의 광범위한 비교는 진행하지 않았습니다)보다 생각하는 버전이 아닌 버전에서 가장 잘 작동하는 것으로 나타났습니다. 생각하는 버전은 시간이 더 오래 걸렸고, 도구 사용에 더 많은 어려움을 겪었으며, 충분한 맥락을 읽지 않고 코드를 작성하는 경우가 많았습니다.

초기 실험에서는 Gemini가 매우 잘 작동하는 것처럼 보였습니다. 아쉽게도 Gemini는 MCP(아직?)를 지원하지 않아서 API 키를 통해서만 사용할 수 있습니다. 다행히 Gemini는 비교적 저렴하고 방대한 컨텍스트를 처리할 수 있습니다.

온보딩

첫 번째 상호작용에서 Serena는 온보딩을 수행하고 첫 번째 메모리 파일을 작성하라는 지시를 받습니다. LLM에 따라 파일이 디스크에 작성되지 않는 경우도 있습니다. 이 경우 Serena에게 메모리를 작성해 달라고 요청하세요.

이 단계에서 Serena는 일반적으로 상당히 많은 텍스트를 읽고 쓰면서 맥락을 채웁니다. 온보딩이 완료되면 토큰이 소진되지 않도록 다른 대화로 전환하는 것이 좋습니다. 온보딩은 명시적으로 트리거하지 않는 한 한 번만 수행됩니다.

온보딩 후에는 메모리를 빠르게 살펴보고, 필요하다면 메모리를 편집하거나 추가 메모리를 추가하는 것이 좋습니다.

코드 편집 전

깨끗한 git 상태에서 코드 생성 작업을 시작하는 것이 가장 좋습니다. 이렇게 하면 변경 사항을 검토하기가 더 쉬워질 뿐만 아니라, 모델 자체도 git diff 명령을 실행하여 변경 사항을 확인하고 스스로 수정하거나 필요한 경우 후속 대화를 통해 작업을 계속할 수 있습니다.

:경고: 중요 : Serena는 시스템 네이티브 줄 끝을 사용하여 파일에 쓰고 git diff를 확인할 수 있으므로 Windows에서 git config core.autocrlf true 로 설정하는 것이 중요합니다. Windows에서 git config core.autocrlf false 로 설정하면 줄 끝 때문에만 큰 diff가 생성될 수 있습니다. 일반적으로 Windows에서 이 git 설정을 활성화하는 것이 좋습니다.

git config --global core.autocrlf true

코드 편집의 잠재적 문제

저희 경험상 LLM은 계산 능력이 매우 부족합니다. 즉, 코드 블록을 적절한 위치에 삽입하는 데 어려움을 겪습니다. 대부분의 편집 작업은 기호 수준에서 수행할 수 있으므로 이 문제를 해결할 수 있습니다. 하지만 때로는 줄 단위 삽입이 유용할 수도 있습니다.

Serena는 편집할 줄 번호와 모든 코드 블록을 다시 한 번 확인하라는 지시를 받았지만, 문제가 발생할 경우 코드 편집 방법을 명시적으로 알려주는 것이 유용할 수도 있습니다.

맥락에서 벗어나다

길고 복잡한 작업이나 Serena가 많은 내용을 읽은 작업의 경우, 컨텍스트 토큰의 한계에 가까워질 수 있습니다. 이 경우 새 대화를 계속하는 것이 좋습니다. Serena는 진행 상황의 현재 상태와 진행을 계속하기 위한 모든 관련 정보를 요약하는 전용 도구를 제공합니다. 이 요약을 생성하고 메모리에 기록하도록 요청할 수 있습니다. 그런 다음 새 대화에서 Serena에게 메모리를 읽고 작업을 계속하도록 요청하면 됩니다. 저희 경험상 이 방법은 매우 효과적이었습니다. 장점은 단일 세션에서는 요약이 필요하지 않기 때문에 Serena가 길을 잃는 경우가 거의 없으며 (내부적으로 요약하는 다른 에이전트와 달리), 올바른 방향으로 가고 있는지 가끔 확인하도록 지시받는다는 것입니다.

게다가 Serena는 맥락을 아껴 쓰도록 지시받았습니다(예: 코드 기호 본문을 불필요하게 읽지 않도록). 하지만 Claude는 항상 아껴 쓰는 데 능숙하지는 않았습니다(Gemini가 더 잘하는 듯했습니다). 필요하지 않다면 본문을 읽지 않도록 명시적으로 지시할 수 있습니다.

도구 실행 제어

Claude Desktop은 도구를 실행하기 전에 사용자에게 묻습니다. 대부분의 도구는 특히 모든 파일이 버전 관리 시스템에 있는 경우 "이 채팅 허용"을 클릭해도 됩니다. 한 가지 예외는 execute_shell_command 도구입니다. 이 도구에서는 각 호출을 개별적으로 검사하는 것이 좋습니다. 이 명령에 대한 각 호출을 검토하고 전체 채팅에 대해 활성화하지 않는 것이 좋습니다.

코드베이스 구조화

Serena는 코드 구조를 사용하여 코드를 찾고, 읽고, 편집합니다. 즉, 잘 구조화된 코드에서는 잘 작동하지만, 완전히 구조화되지 않은 코드(예: 거대하고 모듈화되지 않은 함수를 가진 God-class)에서는 제대로 작동하지 않을 수 있습니다. 타입 주석도 이 부분에서 큰 도움이 됩니다. 코드가 좋을수록 Serena도 더 잘 작동합니다. 따라서 일반적으로 잘 구조화되고 모듈화되며 타입이 지정된 코드를 작성하는 것이 좋습니다. 이는 개발자뿐만 아니라 AI에도 도움이 됩니다 ;).

로깅, 린팅 및 테스트

Serena는 디버깅을 할 수 없습니다(현재 어떤 코딩 어시스턴트도 이를 수행할 수 없는 것으로 알고 있습니다). 따라서 에이전트 루프 내에서 결과를 개선하려면 Serena가 테스트 실행, 스크립트 실행, 린팅(linting) 등을 통해 정보를 수집해야 합니다. 명확한 정보가 포함된 많은 로그 메시지를 포함하고 의미 있는 테스트를 수행하는 것이 매우 유용합니다. 특히 후자는 에이전트가 자체적으로 문제를 해결하는 데 도움이 됩니다.

일반적으로 모든 린팅 검사와 테스트를 통과한 상태에서 편집 작업을 시작하는 것이 좋습니다.

일반적인 조언

특히 간단한 작업일 경우, 실제로 구현하기 전에 작업을 개념화하고 계획하는 데 시간을 투자하는 것이 좋습니다. 이는 더 나은 결과를 얻는 데 도움이 될 뿐만 아니라, 통제력을 높이고 흐름을 따라가는 데도 도움이 됩니다. 한 세션에서는 세레나가 여러분의 코드를 많이 읽어 맥락을 구축할 수 있도록 세부적인 계획을 세운 후, 다른 세션에서는 (적절한 기억을 더듬어 가며) 구현을 계속할 수 있습니다.

문제 해결

Claude Desktop과 다양한 MCP 서버 SDK의 MCP 서버 지원은 비교적 최근에 개발된 기능이므로 불안정할 수 있습니다.

MCP 서버의 작동 구성은 플랫폼과 클라이언트마다 다를 수 있습니다. 상대 경로는 오류의 원인이 될 수 있으므로 항상 절대 경로를 사용하는 것이 좋습니다. 언어 서버는 별도의 하위 프로세스에서 실행되며 asyncio를 통해 호출됩니다. 클라이언트가 충돌을 일으키는 경우가 있습니다. Serena의 로그 창을 활성화했는데 사라지면 무슨 일이 일어났는지 알 수 있습니다.

일부 클라이언트(예: 구스)는 MCP 서버를 제대로 종료하지 못할 수 있으므로, 중단된 파이썬 프로세스를 살펴보고 필요한 경우 수동으로 종료하세요.

세레나 로깅

문제 해결을 돕기 위해 간단한 GUI 로깅 유틸리티를 개발했습니다. 대부분의 고객은 문제 발생 시 프로젝트 설정( project.yml )에서 이 유틸리티를 활성화하는 것이 좋습니다. 또한, 많은 고객이 문제 파악에 도움이 되는 MCP 로그를 작성합니다.

로깅 GUI는 일부 클라이언트와 시스템에서 작동하지 않을 수 있습니다. 현재 macOS나 Cline과 같은 VSCode 확장 프로그램에서는 작동하지 않습니다.

감사의 말

우리는 기존의 여러 오픈소스 기술을 기반으로 Serena를 구축했습니다. 가장 중요한 기술은 다음과 같습니다.

  1. multilspy . LSP를 따르는 언어 서버를 감싸는 아름답게 디자인된 래퍼입니다. Serena가 필요로 하는 심볼릭 로직을 구현하여 쉽게 확장할 수 없었기 때문에 종속성으로 통합하는 대신 소스 코드를 복사하여 필요에 맞게 수정했습니다.

  2. 파이썬 MCP SDK

  3. Agno 와 관련된 agent-ui 는 Serena가 MCP를 지원하는 모델 외의 모든 모델에서 작업할 수 있도록 하는 데 사용됩니다.

  4. Multilspy를 통해 사용하는 모든 언어 서버입니다.

이러한 프로젝트가 없었다면 세레나는 건설될 수 없었을 것입니다(또는 건설하기가 훨씬 더 어려웠을 것입니다).

세레나 커스터마이징

Serena의 AI 기능을 여러분의 아이디어로 확장하는 것은 매우 쉽습니다. serena.agent.Tool 을 상속하여 새 Tool을 구현하고, apply 메서드(인터페이스의 일부가 아님, Tool 주석 참조)를 구현하기만 하면 됩니다. 기본적으로 SerenaAgent 해당 메서드에 즉시 접근할 수 있습니다.

새로운 언어에 대한 지원을 추가하는 것도 비교적 간단합니다. 커뮤니티에서 어떤 결과물을 내놓을지 기대됩니다! 기여에 대한 자세한 내용은 여기를 참조하세요.

도구 전체 목록

다음은 짧은 설명과 함께 나온 Serena 도구의 전체 목록입니다( uv run serena-list-tools 출력):

  • activate_project : 프로젝트를 이름으로 활성화합니다.

  • check_onboarding_performed : 프로젝트 온보딩이 이미 수행되었는지 확인합니다.

  • create_text_file : 프로젝트 디렉토리에 파일을 생성하거나 덮어씁니다.

  • delete_lines : 파일 내에서 일정 범위의 줄을 삭제합니다.

  • delete_memory : Serena의 프로젝트별 메모리 저장소에서 메모리를 삭제합니다.

  • execute_shell_command : 셸 명령을 실행합니다.

  • find_referencing_code_snippets : 주어진 위치의 심볼이 참조되는 코드 조각을 찾습니다.

  • find_referencing_symbols : 지정된 위치의 심볼을 참조하는 심볼을 찾습니다(선택적으로 유형별로 필터링).

  • find_symbol : 지정된 이름/하위 문자열을 포함하거나 포함하는 심볼에 대한 글로벌(또는 로컬) 검색을 수행합니다(선택적으로 유형으로 필터링).

  • get_active_project : 현재 활성화된 프로젝트의 이름을 가져오고(있는 경우) 기존 프로젝트를 나열합니다.

  • get_current_config : 활성 모드, 도구, 컨텍스트를 포함하여 에이전트의 현재 구성을 인쇄합니다.

  • get_symbols_overview : 주어진 파일이나 디렉토리에 정의된 최상위 심볼에 대한 개요를 가져옵니다.

  • initial_instructions : 현재 프로젝트에 대한 초기 지침을 가져옵니다. 시스템 프롬프트를 설정할 수 없는 설정(예: Claude Desktop처럼 사용자가 제어할 수 없는 클라이언트)에서만 사용해야 합니다.

  • insert_after_symbol : 주어진 심볼의 정의가 끝난 뒤에 콘텐츠를 삽입합니다.

  • insert_at_line : 파일의 주어진 줄에 내용을 삽입합니다.

  • insert_before_symbol : 주어진 심볼의 정의 시작 부분 앞에 콘텐츠를 삽입합니다.

  • list_dir : 주어진 디렉토리에 있는 파일과 디렉토리를 나열합니다(선택적으로 재귀 사용 가능).

  • list_memories : Serena의 프로젝트별 메모리 저장소에 있는 메모리를 나열합니다.

  • onboarding : 온보딩(프로젝트 구조 및 필수 작업 식별, 예: 테스트 또는 빌드)을 수행합니다.

  • prepare_for_new_conversation : 새로운 대화를 준비하는 데 필요한 지침을 제공합니다(필요한 맥락을 계속 이해하기 위해).

  • read_file : 프로젝트 디렉토리 내의 파일을 읽습니다.

  • read_memory : Serena의 프로젝트별 메모리 저장소에서 지정된 이름의 메모리를 읽습니다.

  • replace_lines : 파일 내의 특정 줄을 새로운 내용으로 바꿉니다.

  • replace_symbol_body : 심볼의 전체 정의를 바꿉니다.

  • restart_language_server : 언어 서버를 다시 시작합니다. Serena를 통하지 않고 편집이 발생할 경우 필요할 수 있습니다.

  • search_for_pattern : 프로젝트에서 패턴을 검색합니다.

  • summarize_changes : 코드베이스에 적용된 변경 사항을 요약하기 위한 지침을 제공합니다.

  • switch_modes : 모드 이름 목록을 제공하여 모드를 활성화합니다.

  • think_about_collected_information : 수집된 정보의 완전성을 고민하기 위한 사고 도구입니다.

  • think_about_task_adherence : 에이전트가 현재 작업을 여전히 제대로 진행하고 있는지 판단하기 위한 사고 도구입니다.

  • think_about_whether_you_are_done : 작업이 실제로 완료되었는지 판단하기 위한 사고 도구입니다.

  • write_memory : Serena의 프로젝트별 메모리 저장소에 지정된 메모리(나중에 참조할 수 있도록)를 씁니다.

Available Tools

29 tools
activate_projectActivate ProjectB
Read-only

Activates the project with the given name or path.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description does not contradict. The description adds minimal behavioral context by implying activation of a project, but it doesn't elaborate on effects like environment changes or permissions needed. With annotations covering safety, the description provides some value but not rich behavioral details.

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 directly states the tool's function without unnecessary words. It is front-loaded and wastes no space, 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.

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 (activation operation), high schema coverage, annotations, and the presence of an output schema, the description is reasonably complete. It covers the basic action but could benefit from more context on outcomes or integration with sibling tools, though the structured data reduces the burden on the description.

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, clearly documenting the 'project' parameter. The description adds no additional meaning beyond the schema, such as examples or constraints, but since the schema is comprehensive, a baseline score of 3 is appropriate as the description doesn't compensate unnecessarily.

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 resource ('the project with the given name or path'), making the purpose specific and understandable. However, it does not differentiate this tool from sibling tools like 'switch_modes' or 'get_current_config', which might relate to project state changes, so it doesn't fully distinguish from alternatives.

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 'switch_modes' or 'get_current_config', nor does it mention prerequisites like needing a registered project. It lacks explicit when/when-not instructions or named alternatives, leaving usage context unclear.

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

check_onboarding_performedCheck Onboarding PerformedA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description aligns with by implying a non-destructive check. The description adds value by specifying the tool's role in workflow sequencing (before work/after activation), but doesn't provide additional behavioral details like error handling or output interpretation beyond what annotations cover.

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 followed by usage guidelines. Every word serves a clear function, with no redundancy or unnecessary elaboration, making it highly 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?

Given the tool has 0 parameters, annotations covering safety (read-only, non-destructive), and an output schema (implied by context signals), the description is reasonably complete. It explains what the tool does and when to use it, though it could benefit from hinting at the output's meaning (e.g., boolean result or status details) to fully compensate for lack of output schema explanation.

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 doesn't mention parameters, which is appropriate. A baseline of 4 is applied since no parameters exist, and the description focuses correctly on the tool's purpose and usage.

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 specifies the verb ('checks') and resource ('project onboarding'), making the intent unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'onboarding' or 'activate_project', which might have overlapping contexts.

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.' This gives clear timing and context for when to use it, including a reference to the sibling tool 'activate_project' as a related action.

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

create_text_fileCreate Text FileA
Destructive

Write a new file or overwrite an existing file. Returns a message indicating success or failure.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable context by specifying that it can 'overwrite an existing file' and returns 'success or failure' messages. This clarifies the destructive nature beyond the annotation and provides outcome expectations, though it doesn't mention permissions, rate limits, or file encoding details.

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 consists of two tightly focused sentences that efficiently convey the core functionality and outcome. Every word serves a purpose with zero redundancy, and the information is front-loaded with the primary action stated immediately.

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 destructive nature indicated by annotations, the presence of an output schema, and 100% parameter coverage, the description provides adequate context. It covers the tool's primary behavior and outcome expectations, though it could benefit from mentioning encoding requirements or error scenarios for a more complete picture.

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?

With 100% schema description coverage, the input schema fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline score of 3. No additional semantic context is provided for 'relative_path' or 'content' parameters.

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 ('Write a new file or overwrite an existing file') and resource ('file'), distinguishing it from sibling tools like 'read_file' or 'replace_content'. It precisely communicates both creation and overwrite capabilities in a single concise statement.

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 for file creation/overwriting but provides no explicit guidance on when to use this tool versus alternatives like 'replace_content' or 'write_memory'. It mentions the tool's behavior but doesn't specify scenarios where it's preferred over other file manipulation tools in the sibling list.

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

delete_memoryDelete MemoryA
Destructive

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, which cover the core safety profile. The description adds valuable context beyond this by emphasizing the need for explicit user consent and providing rationale examples, which helps the agent understand the gravity of the operation. It doesn't detail error conditions or output behavior, but with annotations present, this is sufficient.

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 that are front-loaded with the core action and immediately followed by critical usage guidelines. Every word serves a purpose, with no redundancy or fluff, making it highly efficient and easy to parse 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 destructive nature, the description effectively complements the annotations by stressing user consent and providing examples. With an output schema present, it doesn't need to explain return values. The combination of clear purpose, strong guidelines, and annotations makes this description sufficiently complete for safe agent use.

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 0% description coverage, with only one parameter ('memory_file_name') documented structurally. The description doesn't add any parameter-specific information, such as format examples or constraints. However, with a single parameter and the tool's clear purpose, the baseline of 3 is appropriate as the schema alone provides minimal but adequate coverage.

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 ('Delete') and resource ('a memory file'), making the purpose immediately understandable. It distinguishes from sibling tools like 'edit_memory', 'read_memory', and 'write_memory' by specifying deletion rather than modification or retrieval. However, it doesn't explicitly contrast with 'list_memories' or other file-related tools beyond the verb itself.

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', with concrete examples ('information retrieved from a memory file is no longer correct or no longer relevant for the project'). This clearly defines the appropriate context and helps the agent avoid misuse, especially given the destructive nature implied by the tool name.

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

edit_memoryEdit MemoryA
Destructive

Replaces content matching a regular expression in a memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYesThe name of the memory.
needleYesThe string or regex pattern to search for. If `mode` is "literal", this string will be matched exactly. If `mode` is "regex", this string will be treated as a regular expression (syntax of Python's `re` module, with flags DOTALL and MULTILINE enabled).
replYesThe replacement string (verbatim).
modeYesEither "literal" or "regex", specifying how the `needle` parameter is to be interpreted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, indicating this is a mutation tool with destructive potential. The description adds useful context about regex matching behavior (Python re module with DOTALL/MULTILINE flags) and the replacement being verbatim, which goes beyond annotations. However, it doesn't mention error conditions, side effects, or what happens when no match is found.

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 functionality ('Replaces content matching a regular expression in a memory'). 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.

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 (regex editing with destructive potential), the description provides adequate context when combined with rich annotations and a complete input schema. However, it could benefit from mentioning the existence of an output schema (which handles return values) and providing more behavioral context about edge cases. The combination of description, annotations, and schema is mostly 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?

With 100% schema description coverage, all parameters are well-documented in the schema itself. The description doesn't add significant semantic information beyond what's already in the parameter descriptions, which thoroughly explain memory_file_name, needle (with mode-specific behavior), repl, and mode. 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 specific action ('Replaces content') on a specific resource ('in a memory') using a specific method ('matching a regular expression'). It distinguishes from siblings like 'replace_content' (general file replacement) and 'write_memory' (full overwrite) by specifying regex-based partial editing of memory 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 implies usage for regex-based editing of memory content, but doesn't explicitly state when to use this vs alternatives like 'replace_content' for non-memory files or 'write_memory' for complete overwrites. It provides clear context about the operation type but lacks explicit exclusion guidance.

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

execute_shell_commandExecute Shell CommandA
Destructive

Execute a shell command and return its output. If there is a memory about suggested commands, read that first. Never execute unsafe shell commands! IMPORTANT: Do not use this tool to start

  • long-running processes (e.g. servers) that are not intended to terminate quickly,

  • processes that require user interaction. 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. -1 means using the default value, don't adjust unless there is no other way to get the content required for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable behavioral context beyond this: it warns against unsafe commands, specifies output truncation behavior via max_answer_chars, mentions checking memory first, and describes the JSON return structure. This provides important safety and operational guidance that annotations alone don't cover.

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, followed by important warnings and return format details. While some sentences could be more concise (e.g., the warning about long-running processes is slightly verbose), overall it's efficient with each sentence serving a clear purpose.

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

Completeness5/5

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

Given the tool's complexity (destructive shell command execution), rich annotations (destructiveHint=true), complete schema coverage, and existence of an output schema, the description provides excellent contextual completeness. It covers safety warnings, usage constraints, memory integration, and output behavior, making it fully adequate for an AI agent to understand when and how to use this tool 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?

With 100% schema description coverage, the input schema already fully documents all 4 parameters. The description doesn't add any parameter-specific semantics beyond what's in the schema descriptions, so it meets the baseline expectation without providing additional value about parameter usage or interactions.

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 return its output') and distinguishes it from siblings by focusing on command execution rather than file operations, memory management, or project configuration. It goes beyond just restating the name/title by specifying the return format and behavioral constraints.

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 NOT to use this tool (for long-running processes or processes requiring user interaction) and references checking memory for suggested commands first. However, it doesn't explicitly name alternative tools for those excluded use cases or differentiate from similar tools like list_dir for directory operations.

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

find_fileFind FileA
Read-only

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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds useful behavioral context by specifying 'non-gitignored files' (exclusion behavior) and the return format ('JSON object with the list of matching files'), but does not mention potential limitations like recursion depth or performance implications.

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 functionality and includes essential details (exclusion of gitignored files, return format) without any wasted words.

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

Completeness5/5

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

Given the tool's moderate complexity, rich annotations (readOnlyHint, destructiveHint), 100% schema coverage, and presence of an output schema, the description is complete enough. It covers purpose, key behavioral trait (non-gitignored), and return format, leaving detailed parameter and output documentation to the structured fields.

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 both parameters well-documented in the schema. The description adds minimal value beyond the schema by implying the search scope and exclusion of gitignored files, but does not provide additional syntax or format details for the parameters.

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 directory contents) and 'search_for_pattern' (which searches file content).

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, excluding gitignored files), but does not explicitly state when not to use it or name alternatives like 'list_dir' for directory listing or 'search_for_pattern' for content search.

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

find_referencing_symbolsFind Referencing SymbolsA
Read-only

Finds references to 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. 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds useful behavioral context beyond annotations by specifying what the result contains (metadata about referencing symbols and short code snippets) and that it returns a list of JSON objects. However, it doesn't mention potential limitations like performance impacts or result size constraints.

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 with zero waste. The first sentence states the core functionality and result format, while the second clarifies the return type. Every word contributes to understanding the tool's purpose and output.

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 presence of annotations (readOnlyHint, destructiveHint), 100% schema coverage, and an output schema (implied by 'Returns a list of JSON objects'), the description provides complete contextual information. It adequately explains what the tool does, what it returns, and references sibling tools where appropriate, making it sufficient for agent understanding.

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

Parameters3/5

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

With 100% schema description coverage, the input schema already documents all 5 parameters thoroughly, including references to the 'find_symbol' tool for parameter behavior. The description doesn't add significant semantic information beyond what's in the schema, maintaining the baseline score of 3 for adequate but not enhanced parameter documentation.

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 ('Finds references') and resource ('the symbol at the given name_path'), and distinguishes it from sibling tools by specifying it returns referencing symbols rather than finding symbols themselves. It explicitly mentions what the result contains (metadata and code snippets), 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 Guidelines4/5

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

The description implies usage context by mentioning the tool finds references to a symbol, suggesting it should be used when you need to know where a symbol is referenced. However, it doesn't explicitly state when to use this tool versus alternatives like 'find_symbol' or provide exclusion criteria, though the parameter descriptions reference 'find_symbol' for some parameters.

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

find_symbolFind SymbolA
Read-only

Retrieves information on all symbols/code entities (classes, methods, etc.) based on the given name path pattern. The returned symbol information can be used for edits or further queries. Specify depth > 0 to also retrieve children/descendants (e.g., methods of a class).

A name path is a path in the symbol tree within a source file. For example, the method my_method defined in class MyClass would have the name path MyClass/my_method. If a symbol is overloaded (e.g., in Java), a 0-based index is appended (e.g. "MyClass/my_method[0]") to uniquely identify it.

To search for a symbol, you provide a name path pattern that is used to match against name paths. It can be

  • a simple name (e.g. "method"), which will match any symbol with that name

  • a relative path like "class/method", which will match any symbol with that name path suffix

  • an absolute name path "/class/method" (absolute name path), which requires an exact match of the full name path within the source file. Append an index [i] to match a specific overload only, e.g. "MyClass/my_method[1]". Returns a list of symbols (with locations) matching the name.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_path_patternYesThe name path matching pattern (see above).
depthNoDepth up to which descendants shall be retrieved (e.g. use 1 to also retrieve immediate children; for the case where the symbol is a class, this will return its methods). Default 0.
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. If not provided, all kinds are included.
exclude_kindsNoOptional. List of LSP symbol kind integers to exclude. Takes precedence over `include_kinds`. If not provided, no kinds are excluded.
substring_matchingNoIf True, use substring matching for the last element of the pattern, such that "Foo/get" would match "Foo/getValue" and "Foo/getData".
max_answer_charsNoMax characters for the JSON result. If exceeded, no content is returned. -1 means the default value from the config will be used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds valuable behavioral context beyond annotations: it explains that results can be used for edits, describes the matching logic (simple name, relative path, absolute path), mentions overload handling with indices, and notes performance considerations (using relative_path speeds up search). It does not contradict annotations.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose, followed by detailed explanations of name paths and patterns. While comprehensive, it is appropriately sized for a complex tool with many parameters. Some sentences could be more concise (e.g., the name path explanation is lengthy), but overall it avoids unnecessary repetition.

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

Completeness5/5

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

Given the tool's complexity (8 parameters, 100% schema coverage, annotations, and an output schema), the description is complete. It covers purpose, usage examples, behavioral nuances (like overload handling and performance tips), and does not need to explain return values since an output schema exists. It adequately complements the structured data without 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 8 parameters thoroughly. The description adds some semantic context for name_path_pattern (explaining patterns and examples) and depth (linking it to retrieving children), but most parameter details are already in the schema. This meets the baseline of 3 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 tool's purpose with specific verbs ('retrieves information on all symbols/code entities') and distinguishes it from siblings by focusing on symbol lookup rather than file operations (find_file), pattern searching (search_for_pattern), or symbol editing (rename_symbol, replace_symbol_body). It explicitly mentions what the returned information can be used for ('for edits or further queries'), which helps differentiate its role.

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 (e.g., 'Specify `depth > 0` to also retrieve children/descendants') and implies alternatives through sibling tool names like find_file or search_for_pattern, but it does not explicitly state when not to use it or name specific alternatives. The guidance on using the relative_path parameter for speed and reduced results offers practical usage advice.

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

get_current_configGet Current ConfigA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds valuable context by specifying what configuration components are included (projects, tools, contexts, modes), which isn't inferable from annotations alone. However, it doesn't mention output format details or potential limitations.

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 ('Print the current configuration') and then enumerates included components. Every word adds value with zero redundancy or fluff.

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

Completeness5/5

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

Given the tool's simplicity (0 parameters, read-only, non-destructive), the description fully covers its purpose and scope. With annotations providing safety context and an output schema existing (so return values needn't be described), the description is complete for this low-complexity 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?

With 0 parameters and 100% schema description coverage, the baseline is 4. The description appropriately doesn't discuss parameters since none exist, avoiding unnecessary detail while clearly indicating the tool operates without inputs.

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 ('Print') and the exact resource ('current configuration of the agent'), listing all included components (active/available projects, tools, contexts, modes). It distinguishes itself from siblings like 'get_symbols_overview' or 'list_memories' by focusing on overall agent configuration rather than specific data subsets.

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 when needing to inspect the agent's configuration state, but provides no explicit guidance on when to use this versus alternatives like 'check_onboarding_performed' or 'switch_modes'. It doesn't specify prerequisites, exclusions, or comparative contexts with sibling tools.

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

get_symbols_overviewGet Symbols OverviewA
Read-only

Use this tool to get a high-level understanding of the code symbols in a file. This should be the first tool to call when you want to understand a new file, unless you already know what you are looking for. Returns a JSON object containing info about top-level symbols in the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file to get the overview of.
depthNoDepth up to which descendants of top-level symbols shall be retrieved (e.g. 1 retrieves immediate children). Default 0.
max_answer_charsNoIf the overview is longer than this number of characters, no content will be returned. -1 means the default value from the config will be used. Don't adjust unless there is really no other way to get the content required for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds valuable context beyond this by specifying that it returns 'a JSON object containing info about top-level symbols in the file,' which clarifies the output format. However, it doesn't mention potential limitations like rate limits or error conditions, leaving some behavioral aspects uncovered.

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 purpose, the second provides usage guidelines, and the third describes the return format. Each sentence adds essential value without redundancy, making it front-loaded and appropriately concise for the tool's complexity.

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

Completeness5/5

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

Given the tool's moderate complexity, rich annotations (readOnlyHint, destructiveHint), 100% schema coverage, and the presence of an output schema, the description is complete enough. It covers purpose, usage context, and output format, leaving detailed parameter and return value documentation to the structured fields, which is appropriate for this setup.

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 all three parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain 'relative_path' context or 'depth' implications further). This meets the baseline of 3 since the schema carries the full burden, but the description doesn't compensate with extra insights.

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 ('get a high-level understanding of the code symbols in a file') and resource ('file'), distinguishing it from sibling tools like 'find_symbol' or 'read_file' by focusing on symbol overview rather than searching or raw content. It explicitly positions this as the first tool for understanding new files, making its purpose distinct and well-defined.

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 ('first tool to call when you want to understand a new file') and when not to ('unless you already know what you are looking for'), effectively differentiating it from alternatives like 'find_symbol' for targeted searches. This clear contextual advice helps the agent choose appropriately among siblings.

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

initial_instructionsInitial InstructionsA
Read-only

Provides the 'Serena Instructions Manual', which contains essential information on how to use the Serena toolbox. IMPORTANT: If you have not yet read the manual, call this tool immediately after you are given your task by the user, as it will critically inform you!.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds that it provides 'essential information' and is 'critical' to inform the agent, which adds context about importance. However, it doesn't specify format, length, or structure of the manual content beyond what annotations provide.

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 concise with two sentences that each serve distinct purposes: stating what the tool provides and giving critical usage instructions. It's front-loaded with the core purpose, though the second sentence could be slightly more streamlined.

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 has 0 parameters, annotations covering safety, and an output schema exists, the description provides adequate context about purpose and critical timing. It doesn't need to explain return values since output schema exists, but could optionally hint at manual content format for slightly better completeness.

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 0 parameters and 100% schema description coverage, the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the tool's purpose and usage timing.

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 'provides the Serena Instructions Manual' which is a specific resource, though it doesn't specify the exact content or format of the manual. It distinguishes itself from siblings by being the only tool focused on providing essential instructions rather than performing project 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 usage guidance: 'If you have not yet read the manual, call this tool immediately after you are given your task by the user, as it will critically inform you!' This clearly indicates when to use it (immediately after task assignment if manual not read) and implies it's foundational before using other tools.

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

insert_after_symbolInsert After SymbolA
Destructive

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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable behavioral context: it specifies that insertion occurs 'after the end of the definition' and that 'the inserted code shall begin with the next line after the symbol.' This clarifies the exact positioning behavior beyond what annotations provide.

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 perfectly concise with two sentences: the first states the core functionality, the second provides a typical use case. Every word earns its place, and the most important information (what the tool does) is front-loaded.

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 presence of both annotations (destructiveHint=true, readOnlyHint=false) and an output schema (implied by context signals), the description provides complete contextual information. It covers the tool's purpose, typical usage, and behavioral specifics without needing to explain return values or safety characteristics that are already documented elsewhere.

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?

With 100% schema description coverage, all parameters are already documented in the input schema. The description adds some context by mentioning 'symbol's location' and referencing 'find_symbol' for name_path, but doesn't provide significant additional semantic meaning beyond what's in the schema descriptions.

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') and target ('after the end of the definition of the given symbol'), with explicit mention of the content being inserted ('body/content'). It distinguishes from sibling 'insert_before_symbol' by specifying 'after' positioning, and from 'replace_symbol_body' by indicating insertion rather than replacement.

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') and references the 'find_symbol' tool for determining symbol locations. However, it doesn't explicitly state when NOT to use it or directly compare with alternatives like 'insert_before_symbol' or 'replace_content'.

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

insert_before_symbolInsert Before SymbolA
Destructive

Inserts the given 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; or 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by describing an insertion operation that modifies files. The description adds valuable context beyond annotations by specifying that insertion occurs 'before the beginning of the definition' and via 'the symbol's location', and mentions typical use cases, which helps the agent understand the tool's behavior in practical scenarios.

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 second sentence providing typical use cases. Both sentences earn their place by clarifying scope and practical applications without redundancy or unnecessary details.

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

Completeness5/5

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

Given the tool's moderate complexity (file modification with symbol-based positioning), the description provides sufficient context alongside annotations (destructive, not read-only) and a complete input schema. With an output schema present, the description does not need to explain return values, making it complete for agent usage.

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 clear documentation for all three parameters (name_path, relative_path, body). The description adds minimal semantic value beyond the schema, only implying that 'body' is content to insert and referencing 'find_symbol' for name_path definitions. This meets the baseline of 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 verb ('inserts') and resource ('content before the beginning of the definition of the given symbol'), with specific examples of typical use cases (new class, function, method, field, variable assignment, or import statement). It distinguishes from sibling 'insert_after_symbol' by specifying 'before' rather than 'after'.

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 a new import statement before the first symbol in the file'), but does not explicitly state when not to use it or name alternatives beyond the implied sibling 'insert_after_symbol'. It lacks explicit exclusions or prerequisites.

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

list_dirList DirA
Read-only

Lists 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.
skip_ignored_filesNoWhether to skip files and directories that are ignored.
max_answer_charsNoIf the output is longer than this number of characters, no content will be returned. -1 means the default value from the config will be used. Don't adjust unless there is really no other way to get the content required for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds value by specifying the return format ('JSON object with names of directories and files') and hinting at recursion behavior, but does not disclose additional traits like rate limits, auth needs, or error conditions beyond what annotations provide.

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 and adds useful details in the second. Both sentences earn their place by clarifying functionality and output format without redundancy or unnecessary elaboration, making it efficient and well-structured.

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, rich annotations (readOnlyHint, destructiveHint), and the presence of an output schema, the description is largely complete. It covers purpose, optional recursion, and return format, though it could benefit from more explicit usage guidelines or edge-case handling to be fully comprehensive.

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 parameters are fully documented in the schema. The description adds minimal semantics by mentioning recursion and the return format, but does not provide extra details on parameter usage or interactions beyond what the schema already covers, aligning with 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 verb ('Lists') and resource ('files and directories'), specifies the scope ('in the given directory'), and mentions an optional feature ('with recursion'). It distinguishes itself from sibling tools like 'find_file' or 'search_for_pattern' by focusing on directory listing rather than searching or filtering.

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 for directory listing but does not explicitly state when to use this tool versus alternatives like 'find_file' or 'search_for_pattern'. It mentions recursion as an option but lacks guidance on scenarios where recursion is preferred or when to avoid it, leaving usage context somewhat implied.

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

list_memoriesList MemoriesA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds no behavioral traits beyond this, such as pagination, sorting, or access constraints, relying entirely on annotations for safety disclosure.

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 with two sentences that are front-loaded and waste-free. Every word contributes to understanding the tool's purpose and usage, making it efficient and well-structured.

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, read-only, non-destructive) and the presence of annotations and an output schema, the description is complete enough for basic use. It could benefit from more detail on output format or limitations, but the essentials are covered.

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 0 parameters and 100% schema description coverage, the schema fully documents the lack of inputs. The description doesn't need to add parameter details, and its mention of 'available memories' implies no filtering, which aligns with the empty schema. Baseline is 4 for zero parameters.

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 with a specific verb ('List') and resource ('memories'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'read_memory' beyond mentioning it as a follow-up action, missing direct comparison.

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 by stating that listed memories can be read with 'read_memory', implying usage as a precursor to that tool. It doesn't specify when not to use it or alternatives, but the guidance is sufficient for basic navigation.

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

onboardingOnboardingA
Read-only

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds context about the one-time-per-conversation constraint and that it returns instructions, which are useful behavioral details beyond the annotations. However, it doesn't describe error handling or what happens if called multiple times.

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 call it, and the second specifies the call frequency and return value. Every sentence adds essential information without redundancy.

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 has 0 parameters, annotations covering safety, and an output schema (implied by context signals), the description is mostly complete. It covers purpose, usage guidelines, and behavioral constraints. However, it could briefly mention what the instructions entail or link to sibling tools for more context, but the output schema likely handles return values.

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% coverage, 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 there are no parameters to document.

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 specifies the verb 'call' and the resource 'onboarding', but doesn't explicitly differentiate from sibling tools like 'check_onboarding_performed' or 'initial_instructions' beyond the conditional trigger.

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 name 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.

prepare_for_new_conversationPrepare For New ConversationB
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe, non-destructive operation. The description adds no behavioral context beyond what annotations provide, such as what 'preparing' entails or any side effects. However, it doesn't contradict annotations.

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

Conciseness4/5

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

The description is two short sentences with zero wasted words. It's appropriately sized and front-loaded, though the first sentence is uninformative. Every sentence serves a purpose: the first states the tool's name, and the second provides critical usage guidance.

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 zero parameters, annotations covering safety, and an output schema (which means return values are documented elsewhere), the description is minimally adequate. However, it fails to explain what 'preparing for a new conversation' actually means or what the tool does, leaving a significant gap in understanding its purpose.

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 zero parameters, and schema description coverage is 100%. With no parameters to document, the description doesn't need to compensate for any gaps. The baseline for zero parameters is 4, as there's nothing to explain beyond the empty schema.

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 'Instructions for preparing for a new conversation' is a tautology that restates the tool's name/title without specifying what the tool actually does. It lacks a clear verb+resource combination and doesn't distinguish this tool from its many siblings.

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 when-to-use guidance. This is a strong, unambiguous usage rule that helps the agent avoid inappropriate invocations.

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

read_fileRead FileA
Read-only

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. 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds valuable context beyond this: it explains that it can read 'a chunk' of a file (via start_line/end_line parameters) and warns about the max_answer_chars constraint ('no content will be returned' if exceeded). This enhances behavioral understanding without contradicting annotations.

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

Conciseness5/5

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

The description is efficiently structured in two sentences: the first states the core functionality and preferred alternatives, the second clarifies the return value. Every sentence serves a clear purpose 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.

Completeness5/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 (4 parameters, 1 required), 100% schema coverage, annotations covering safety, and an output schema (implied by 'Returns...'), the description is complete. It covers purpose, guidelines, and key behavioral aspects without needing to repeat schema details or explain return values extensively.

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 all four parameters. The description mentions 'chunk' reading and the max_answer_chars behavior, but these details are already covered in the schema descriptions for start_line, end_line, and max_answer_chars. It adds minimal semantic value beyond what the structured schema provides.

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

Purpose5/5

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

The description clearly states the specific action ('Reads') and resource ('the given file or a chunk of it'), distinguishing it from sibling tools like find_symbol or find_referencing_symbols. It explicitly mentions what it returns ('full text of the file at the given relative path'), making the purpose unambiguous and well-defined.

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: 'Generally, symbolic operations like find_symbol or find_referencing_symbols should be preferred if you know which symbols you are looking for.' This clearly indicates when not to use this tool and names specific sibling alternatives, offering strong contextual direction.

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

read_memoryRead MemoryA
Read-only

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating this is a safe read operation. The description adds valuable behavioral context beyond annotations: it specifies relevance criteria (based on file name) and a usage constraint (no repeated reads in same conversation). However, it doesn't disclose other potential behaviors like error handling, response format, or performance characteristics.

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 purpose, the second provides usage criteria, and the third adds a behavioral constraint. Every sentence adds value without redundancy, and it's front-loaded with the essential action. No wasted words or unnecessary elaboration.

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 (a read operation with relevance filtering), annotations cover safety (read-only, non-destructive), and an output schema exists (so return values needn't be described), the description is reasonably complete. It adds useful context like relevance criteria and usage limits, though it lacks parameter explanations and doesn't fully address sibling tool differentiation.

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 documentation. The description doesn't explain either parameter's semantics—it mentions 'memory file name' but doesn't clarify its format or source, and omits 'max_answer_chars' entirely. Since parameters are few (2) and one has a default, the baseline is 3, but the description fails to compensate for the coverage gap.

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 ('Read') and resource ('content of a memory file'), making the purpose unambiguous. It distinguishes this tool from siblings like 'list_memories' (which lists files) and 'write_memory' (which writes content). However, it doesn't explicitly contrast with 'read_file' (which reads general files), leaving some sibling differentiation incomplete.

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 ('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 alternatives by referencing the memory file name for relevance inference, though it doesn't name specific sibling tools like 'list_memories' for discovery.

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

rename_symbolRename SymbolA
Destructive

Renames the symbol with the given name_path to new_name throughout the entire codebase. Note: for languages with method overloading, like Java, name_path may have to include a method's signature to uniquely identify a method. Returns result summary indicating success or failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_pathYesName path of the symbol to rename (definitions in the `find_symbol` tool apply).
relative_pathYesThe relative path to the file containing the symbol to rename.
new_nameYesThe new name for the symbol.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable context: it specifies the scope ('throughout the entire codebase'), mentions language-specific considerations (Java method overloading), and describes the return format ('result summary indicating success or failure'). This goes beyond what annotations provide.

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 perfectly sized at three sentences, front-loaded with the core purpose, followed by important implementation notes and return value information. Every sentence earns its place with no wasted words.

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 destructive nature (annotations), 3 parameters with full schema coverage, and the existence of an output schema, the description provides complete context. It covers purpose, scope, language considerations, and return format without needing to explain parameters or output details already documented elsewhere.

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?

With 100% schema description coverage, the schema already documents all three parameters thoroughly. The description adds minimal extra context: it references 'find_symbol' tool for name_path definitions and mentions method signatures for overloading, but doesn't provide significant additional parameter semantics beyond the schema.

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

Purpose5/5

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

The description clearly states the verb ('renames') and resource ('symbol with the given name_path'), specifying scope ('throughout the entire codebase'). It distinguishes from siblings like 'replace_symbol_body' by focusing on renaming rather than content replacement.

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 (renaming symbols across codebases) and includes a note about method overloading in languages like Java. However, it doesn't explicitly state when NOT to use it or name 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.

replace_contentReplace ContentA
Destructive

Replaces one or more occurrences of a given pattern in a file with new content.

This is the preferred way to replace content in a file whenever the symbol-level tools are not appropriate.

VERY IMPORTANT: The "regex" mode allows very large sections of code to be replaced without fully quoting them! Use a regex of the form "beginning.*?end-of-text-to-be-replaced" to be faster and more economical! ALWAYS try to use wildcards to avoid specifying the exact content to be replaced, especially if it spans several lines. Note that you cannot make mistakes, because if the regex should match multiple occurrences while you disabled allow_multiple_occurrences, an error will be returned, and you can retry with a revised regex. Therefore, using regex mode with suitable wildcards is usually the best choice!.

ParametersJSON Schema
NameRequiredDescriptionDefault
relative_pathYesThe relative path to the file.
needleYesThe string or regex pattern to search for. If `mode` is "literal", this string will be matched exactly. If `mode` is "regex", this string will be treated as a regular expression (syntax of Python's `re` module, with flags DOTALL and MULTILINE enabled).
replYesThe replacement string (verbatim). If mode is "regex", the string can contain backreferences to matched groups in the needle regex, specified using the syntax $!1, $!2, etc. for groups 1, 2, etc.
modeYesEither "literal" or "regex", specifying how the `needle` parameter is to be interpreted.
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).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by describing a replacement operation. The description adds valuable behavioral context beyond annotations: it explains error handling when allow_multiple_occurrences is false, provides regex performance optimization tips, and mentions retry capabilities. However, it doesn't cover rate limits or specific permission requirements.

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 front-loaded with the core purpose, but contains some redundancy in advocating for regex mode (mentioned multiple times with similar points). The 'VERY IMPORTANT' section could be more streamlined, though all sentences contribute meaningful guidance about tool usage strategies.

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

Completeness5/5

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

Given the tool's complexity (destructive file operation with regex capabilities), the description provides comprehensive context: it explains when to use this versus alternatives, offers detailed regex usage strategies, describes error behavior, and references sibling tools. With annotations covering safety aspects and an output schema presumably handling return values, the description fills all necessary 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?

With 100% schema description coverage, the baseline is 3. The description adds meaningful context about parameter usage: it emphasizes regex mode advantages for large sections, explains wildcard strategies to avoid exact content specification, and clarifies the interaction between regex patterns and the allow_multiple_occurrences parameter. This provides practical guidance beyond the schema's technical specifications.

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 ('replaces one or more occurrences of a given pattern in a file with new content') and distinguishes it from sibling tools by mentioning 'symbol-level tools' as alternatives. It explicitly names the resource (file content) and operation (replacement).

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 ('preferred way to replace content... whenever the symbol-level tools are not appropriate') and offers detailed advice on regex mode usage versus literal mode. It also references sibling tools like 'replace_symbol_body' as alternatives for symbol-level operations.

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

replace_symbol_bodyReplace Symbol BodyA
Destructive

Replaces the body of the symbol with the given name_path.

The tool shall be used to replace symbol bodies that have been previously retrieved (e.g. via find_symbol). IMPORTANT: Do not use this tool if you do not know what exactly constitutes the body of the symbol.

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. The symbol body is the definition of a symbol in the programming language, including e.g. the signature line for functions. IMPORTANT: The body does NOT include any preceding docstrings/comments or imports, in particular.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by implying a mutation ('Replaces'). The description adds valuable context beyond annotations: it clarifies that the body excludes 'preceding docstrings/comments or imports,' specifies a prerequisite (previous retrieval via find_symbol), and warns about misuse if the body is unclear. This enhances behavioral understanding without contradicting annotations.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by usage guidelines and a critical warning. Each sentence earns its place by providing essential information without redundancy, resulting in a well-structured and efficient text.

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

Completeness5/5

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

Given the tool's complexity (destructive mutation with 3 required parameters), the description is complete: it covers purpose, usage context, prerequisites, and critical warnings. With annotations providing safety cues and an output schema present (implying return values are documented elsewhere), no additional information is needed for effective tool selection and invocation.

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 detailed parameter documentation (e.g., 'body' includes the definition excluding docstrings). The description adds minimal semantics beyond the schema, such as linking 'name_path' to 'find_symbol' logic, but does not significantly enhance parameter understanding. With high schema coverage, a baseline score of 3 is appropriate.

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 body of the symbol') and identifies the target resource ('symbol with the given name_path'). It distinguishes from siblings like 'rename_symbol' (which changes the name) and 'replace_content' (which replaces file content rather than symbol bodies), establishing a unique purpose.

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 ('to replace symbol bodies that have been previously retrieved via find_symbol') and when not to use ('Do not use this tool if you do not know what exactly constitutes the body of the symbol'). It also references a specific alternative tool ('find_symbol') for preparation, offering clear context for usage.

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

search_for_patternSearch For PatternA
Read-only

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 mapping of file paths to lists of matched consecutive lines.

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"). Supports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}. Only matches files, not directories. If left empty, all non-ignored files will be included.
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"). Supports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}. Takes precedence over paths_include_glob. Only matches files, not directories. If left empty, no files are excluded.
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. -1 means the default value from the config will be used. 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description aligns with by describing a search operation. The description adds significant behavioral context beyond annotations, detailing pattern matching logic (e.g., DOTALL compilation, line inclusion, greedy vs. non-greedy quantifiers) and file selection logic (e.g., glob patterns, restrictions), though it doesn't explicitly mention rate limits or auth needs, which are not contradictory.

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. It is appropriately sized, but some sentences could be more concise (e.g., the explanation of DOTALL and greedy quantifiers is slightly verbose), though overall it avoids waste and is easy to follow.

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, regex patterns, file restrictions) and the presence of annotations and an output schema (implied by 'Returns A mapping of file paths to lists of matched consecutive lines'), the description is complete. It covers usage scenarios, behavioral details, and parameter interactions without needing to explain return values, making it sufficient for an AI agent to use the tool 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%, so the schema already documents all parameters thoroughly. The description adds some value by explaining the purpose of parameters like 'restrict_search_to_code_files' and how glob patterns work relative to the project root, but it doesn't provide significant additional semantics beyond what's in the schema, warranting a baseline score of 3.

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

Purpose5/5

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

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 ('patterns in the codebase'), and scope ('including non-code files'), and distinguishes it from sibling tools by explicitly mentioning alternatives like 'find_symbol' and 'find_referencing_symbols'.

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 advises on context, such as using 'restrict_search_to_code_files' for code symbols and setting it to 'False' for non-code files, offering clear alternatives and exclusions.

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

switch_modesSwitch ModesB
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
modesYesThe names of the modes to activate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe, non-destructive operation. The description adds minimal context by implying activation of modes, but doesn't disclose behavioral traits like what 'activation' entails (e.g., state changes, side effects, or interactions with other tools). It doesn't contradict annotations, but offers little beyond them.

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, efficient sentence that front-loads the purpose with examples. It avoids unnecessary words and gets straight to the point. However, it could be slightly more structured by explicitly stating the tool's role in the context of sibling tools, but as-is, it's concise and well-formed.

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 an output schema (which handles return values), annotations covering safety, and high schema coverage, the description is minimally adequate. It explains the basic action but lacks context on what modes are, how they interact with other tools, or when to use this. For a tool that likely changes system state (despite readOnlyHint), more detail on behavior and usage would improve completeness.

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' fully documented in the schema. The description adds value by providing examples (e.g., ['editing', 'interactive']), which clarify the expected format and possible values beyond the schema's generic array of strings. However, it doesn't explain semantics like what modes are available or their effects, keeping it at the baseline for high schema coverage.

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 ('Activates') and resource ('the desired modes'), making the purpose understandable. It provides specific examples like 'editing', 'interactive', 'planning', and 'one-shot' which help illustrate what modes might be. However, it doesn't explicitly differentiate from sibling tools like 'activate_project' or 'get_current_config', which could cause confusion about when to use this versus 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 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 exclusions. Given sibling tools like 'activate_project' and 'get_current_config', the lack of differentiation leaves the agent without clear usage rules, relying solely on the tool name and description which are vague about scope.

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

think_about_collected_informationThink About Collected InformationA
Read-only

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe, non-destructive operation. The description adds context about when to call it (after searching steps), which is useful behavioral guidance beyond the annotations. However, it doesn't disclose details like what the tool actually does (e.g., returns analysis, triggers internal processing) or any rate limits, 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 two sentences that are front-loaded with the core purpose and followed by specific usage guidelines. Every sentence adds value without 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.

Completeness4/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, annotations cover safety (read-only, non-destructive), an output schema exists (so return values are documented elsewhere), and the description provides clear usage context, it's mostly complete. However, it could be more explicit about what the tool outputs or how it aids decision-making, slightly reducing completeness.

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's no need for parameter details in the description. The description appropriately doesn't discuss parameters, which is efficient. A baseline of 4 is applied since no parameters exist, and the description doesn't introduce unnecessary complexity.

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 collected information' and assessing sufficiency/relevance, which gives a general purpose. However, it's somewhat vague about what specific action the tool performs (e.g., does it analyze, summarize, or just prompt reflection?) and doesn't clearly differentiate from sibling tools like 'think_about_task_adherence' or 'think_about_whether_you_are_done' beyond the information focus.

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 guidance: 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 versus alternatives, making it highly actionable.

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

think_about_task_adherenceThink About Task AdherenceA
Read-only

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true and destructiveHint=false, which already convey that this is a safe, non-destructive operation. The description adds context about its role in ensuring task adherence before code modifications, which is useful behavioral insight beyond the annotations. However, it does not detail aspects like potential side effects, performance implications, 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.

Conciseness4/5

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

The description is concise and front-loaded, with three sentences that directly address purpose and usage without unnecessary details. Each sentence adds value, such as the specific trigger conditions and mandatory usage before code changes, making it 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 the tool's complexity (low, with 0 parameters), rich annotations (readOnlyHint, destructiveHint), and the presence of an output schema, the description is complete enough. It explains the tool's role in task adherence and when to use it, which aligns with the structured data. However, it could slightly enhance completeness by mentioning what the output schema returns, though this is not strictly necessary.

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 explanation in the description. The description appropriately does not discuss parameters, which is efficient, but since there are no parameters, a baseline of 4 is applied as it fully compensates for the lack of parameter details.

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's purpose as 'Think about the task at hand and whether you are still on track,' which is a clear action but somewhat vague in scope. It does not specify what resources or data it operates on, and it does not distinguish itself from sibling tools like 'think_about_collected_information' or 'think_about_whether_you_are_done,' making it less specific than ideal.

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 usage guidelines: 'Especially important if the conversation has been going on for a while and there has been a lot of back and forth' and 'This tool should ALWAYS be called before you insert, replace, or delete code.' This gives clear context for when to use it, though it does not explicitly state when not to use it or compare it to alternatives like other 'think' tools.

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_doneThink About Whether You Are DoneA
Read-only

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true and destructiveHint=false, which the description does not contradict. The description adds context by implying this is a self-assessment or decision-making tool, but it does not disclose additional behavioral traits like what triggers the 'done' state, any side effects, or how it interacts with other tools. With annotations covering safety, the description provides minimal extra value.

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 directly states the tool's purpose and usage. It is front-loaded with the key information and contains no redundant or extraneous details, 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.

Completeness4/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, annotations covering read-only and non-destructive behavior, and an output schema exists, the description is reasonably complete. It explains when to use the tool, which is the core need. However, it could be more detailed about what 'done' entails or how it integrates with other tools, leaving minor gaps in full context.

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% coverage, so no parameter documentation is needed. The description does not add parameter details, which is appropriate. A baseline of 4 is applied since there are no parameters, and the description does not introduce unnecessary complexity.

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's purpose as 'call this tool whenever you feel that you are done with what the user has asked for,' which is a clear action but vague in scope. It specifies a verb ('call') but lacks concrete details about what 'done' means or what resource it operates on, making it somewhat ambiguous compared to more specific sibling tools like 'create_text_file' or 'read_file'.

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: 'whenever you feel that you are done with what the user has asked for.' This gives a clear context for invocation. However, it does not mention when not to use it or name alternatives, such as sibling tools like 'think_about_collected_information' or 'think_about_task_adherence,' which might be relevant for related decision-making processes.

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

write_memoryWrite MemoryA
Destructive

Write some information (utf-8-encoded) about this project that can be useful for future tasks to a memory in md format. The memory name should be meaningful.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_file_nameYes
contentYes
max_answer_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description aligns with by implying a write operation. The description adds valuable context beyond annotations: it specifies the memory is stored in markdown format and should have a meaningful name, which helps the agent understand behavioral expectations. No contradiction with annotations.

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

Conciseness5/5

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

The description is two concise sentences that front-load the core purpose and key requirements. Every word adds value: the first sentence covers action, content, format, and purpose; the second emphasizes naming quality. No wasted words or redundancy.

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 a destructive tool with 3 parameters (0% schema coverage) and an output schema, the description adequately covers the purpose and format but lacks parameter details and behavioral nuances like error handling or idempotency. The output schema may help with return values, but the description doesn't fully compensate for the low parameter coverage.

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?

Schema description coverage is 0%, so the description must compensate. It mentions 'memory name should be meaningful' (hinting at memory_file_name) and 'information... to a memory' (hinting at content), but doesn't explain max_answer_chars or provide details on parameter formats, constraints, or interactions. This leaves significant gaps in parameter understanding.

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 ('Write some information') and resource ('to a memory'), specifying the format ('md format') and encoding ('utf-8-encoded'). It distinguishes from siblings like 'read_memory' and 'edit_memory' by focusing on creation, but doesn't explicitly differentiate from 'create_text_file' which might have overlapping functionality.

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 context ('about this project', 'useful for future tasks'), suggesting when to use it for project documentation. However, it lacks explicit guidance on when to choose this over alternatives like 'create_text_file' or 'edit_memory', and doesn't mention prerequisites 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. 17 tool updatesv1.0.0
    • Changedcreate_text_file1 field changed
      • changedInput schema / properties / content / description
        Previous value: -"The (utf-8-encoded) content to write to the file."New value: +"The (appropriately encoded) content to write to the file."
    • Addededit_memory
    • Changedexecute_shell_command2 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the output is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task."New value: +"If the output is longer than this number of characters,\nno content will be returned. -1 means using the default value, don't adjust unless there is no other way to get the content\nrequired for the task."
    • Changedfind_referencing_symbols1 field changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
    • Changedfind_symbol7 fields changed
      • changedInput schema / properties / depth / description
        Previous value: -"Depth to retrieve descendants (e.g., 1 for class methods/attributes)."New value: +"Depth up to which descendants shall be retrieved (e.g. use 1 to also retrieve immediate children;\nfor the case where the symbol is a class, this will return its methods).\nDefault 0."
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"Max characters for the JSON result. If exceeded, no content is returned."New value: +"Max characters for the JSON result. If exceeded, no content is returned.\n-1 means the default value from the config will be used."
      • removedInput schema / properties / name_path
        Removed value: -{
        -  "description": "The name path pattern to search for, see above for details.",
        -  "title": "Name Path",
        -  "type": "string"
        -}
      • addedInput schema / properties / name_path_pattern
        Added value: +{
        +  "description": "The name path matching pattern (see above).",
        +  "title": "Name Path Pattern",
        +  "type": "string"
        +}
      • changedInput schema / properties / substring_matching / description
        Previous value: -"If True, use substring matching for the last segment of `name`."New value: +"If True, use substring matching for the last element of the pattern, such that\n\"Foo/get\" would match \"Foo/getValue\" and \"Foo/getData\"."
      • changedInput schema / required
        Previous value: -[
        -  "name_path"
        -]New value: +[
        +  "name_path_pattern"
        +]
    • Addedget_current_config
    • Changedget_symbols_overview3 fields changed
      • addedInput schema / properties / depth
        Added value: +{
        +  "default": 0,
        +  "description": "Depth up to which descendants of top-level symbols shall be retrieved\n(e.g. 1 retrieves immediate children). Default 0.",
        +  "title": "Depth",
        +  "type": "integer"
        +}
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the overview is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task."New value: +"If the overview is longer than this number of characters,\nno content will be returned. -1 means the default value from the config will be used.\nDon't adjust unless there is really no other way to get the content required for the task."
    • Addedinitial_instructions
    • Changedlist_dir3 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the output is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task."New value: +"If the output is longer than this number of characters,\nno content will be returned. -1 means the default value from the config will be used.\nDon't adjust unless there is really no other way to get the content required for the task."
      • addedInput schema / properties / skip_ignored_files
        Added value: +{
        +  "default": false,
        +  "description": "Whether to skip files and directories that are ignored.",
        +  "title": "Skip Ignored Files",
        +  "type": "boolean"
        +}
    • Changedread_file1 field changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
    • Changedread_memory1 field changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
    • Addedrename_symbol
    • Addedreplace_content
    • Removedreplace_regex
    • Changedreplace_symbol_body1 field changed
      • changedInput schema / properties / body / description
        Previous value: -"The new symbol body. Important: Begin directly with the symbol definition and provide no\nleading indentation for the first line (but do indent the rest of the body according to the context)."New value: +"The new symbol body. The symbol body is the definition of a symbol\nin the programming language, including e.g. the signature line for functions.\nIMPORTANT: The body does NOT include any preceding docstrings/comments or imports, in particular."
    • Changedsearch_for_pattern4 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • changedInput schema / properties / max_answer_chars / description
        Previous value: -"If the output is longer than this number of characters,\nno content will be returned. Don't adjust unless there is really no other way to get the content\nrequired for the task. Instead, if the output is too long, you should\nmake a stricter query."New value: +"If the output is longer than this number of characters,\nno content will be returned.\n-1 means the default value from the config will be used.\nDon't adjust unless there is really no other way to get the content\nrequired for the task. Instead, if the output is too long, you should\nmake a stricter query."
      • changedInput schema / properties / paths_exclude_glob / description
        Previous value: -"Optional glob pattern specifying files to exclude from the search.\nMatches against relative file paths from the project root (e.g., \"*test*\", \"**/*_generated.py\").\nTakes precedence over paths_include_glob. Only matches files, not directories. If left empty, no files are excluded."New value: +"Optional glob pattern specifying files to exclude from the search.\nMatches against relative file paths from the project root (e.g., \"*test*\", \"**/*_generated.py\").\nSupports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}.\nTakes precedence over paths_include_glob. Only matches files, not directories. If left empty, no files are excluded."
      • changedInput schema / properties / paths_include_glob / description
        Previous value: -"Optional glob pattern specifying files to include in the search.\nMatches against relative file paths from the project root (e.g., \"*.py\", \"src/**/*.ts\").\nOnly matches files, not directories. If left empty, all non-ignored files will be included."New value: +"Optional glob pattern specifying files to include in the search.\nMatches against relative file paths from the project root (e.g., \"*.py\", \"src/**/*.ts\").\nSupports standard glob patterns (*, ?, [seq], **, etc.) and brace expansion {a,b,c}.\nOnly matches files, not directories. If left empty, all non-ignored files will be included."
    • Changedwrite_memory4 fields changed
      • changedInput schema / properties / max_answer_chars / default
        Previous value: -200000New value: +-1
      • addedInput schema / properties / memory_file_name
        Added value: +{
        +  "title": "Memory File Name",
        +  "type": "string"
        +}
      • removedInput schema / properties / memory_name
        Removed value: -{
        -  "title": "Memory Name",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "memory_name",
        -  "content"
        -]New value: +[
        +  "memory_file_name",
        +  "content"
        +]
  2. 25 tool updates
    • First observedactivate_project
    • First observedcheck_onboarding_performed
    • First observedcreate_text_file
    • First observeddelete_memory
    • First observedexecute_shell_command
    • First observedfind_file
    • First observedfind_referencing_symbols
    • First observedfind_symbol
    • First observedget_symbols_overview
    • First observedinsert_after_symbol
    • First observedinsert_before_symbol
    • First observedlist_dir
    • First observedlist_memories
    • First observedonboarding
    • First observedprepare_for_new_conversation
    • First observedread_file
    • First observedread_memory
    • First observedreplace_regex
    • First observedreplace_symbol_body
    • First observedsearch_for_pattern
    • First observedswitch_modes
    • First observedthink_about_collected_information
    • First observedthink_about_task_adherence
    • First observedthink_about_whether_you_are_done
    • First observedwrite_memory

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between search tools (find_symbol, find_referencing_symbols, search_for_pattern) and file operations (read_file vs. find_file vs. list_dir). The descriptions help clarify differences, but an agent might occasionally misselect between similar search or file access tools.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern (e.g., activate_project, create_text_file, execute_shell_command) with only minor deviations like initial_instructions (adjective_noun) and think_about_* tools (verb_phrase). Overall, the pattern is predictable and readable.

Tool Count3/5

With 29 tools, the count feels heavy for a code assistant server, bordering on overwhelming. While many tools are specialized (e.g., multiple think_about_* tools), the high number could lead to confusion or inefficiency in tool selection.

Completeness5/5

The toolset provides comprehensive coverage for code editing and project management, including CRUD operations for files and symbols, search capabilities, memory management, and workflow guidance (e.g., onboarding, thinking tools). No obvious gaps are present for its intended domain.

Maintenance

ActivityActive
ResponsivenessResponsive

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
    B
    quality
    C
    maintenance
    A coding agent toolkit that transforms LLMs into coding assistants capable of working directly on your codebase with semantic code retrieval and editing tools, providing IDE-like capabilities without requiring API subscriptions.
    33
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides semantic code intelligence tools (search, structural views) and a workspace TUI interface for LLM agents to efficiently navigate codebases, manage context, and maintain architectural patterns across Python, Java, C++, and Perl projects.
    4
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A coding agent toolkit that provides IDE-like semantic code retrieval and editing tools, enabling LLMs to efficiently navigate and modify codebases using symbol-level operations instead of basic file reading and string replacements.
    19
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides Cursor-like code intelligence using tools like ripgrep, ctags, and tree-sitter to help LLMs explore and understand entire codebases. It implements a structured, phase-gated workflow to ensure high-confidence code modifications and eliminate hallucinations.
    -

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/oraios/serena'

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