Skip to main content
Glama

편집자 MCP

FastMCP 기반으로 구축된 Python 기반 텍스트 편집기 서버로, 강력한 파일 작업 도구를 제공합니다. 이 서버는 표준화된 API를 통해 텍스트 파일을 읽고, 편집하고, 관리할 수 있도록 지원하며, 고유한 다단계 접근 방식을 통해 LLM 및 AI 어시스턴트의 코드 편집 정확도와 안정성을 크게 향상시킵니다.

특징

  • 파일 선택 : 절대 경로를 사용하여 작업할 파일 설정

  • 읽기 작업 :

    • skim 사용하여 줄 번호가 있는 전체 파일 읽기

    • read 사용하여 접두사가 붙은 줄 번호로 특정 줄 범위를 읽습니다.

    • find_line 사용하여 파일 내에서 특정 텍스트 찾기

    • find_function 사용하여 Python 및 JavaScript/JSX 파일에서 함수 정의를 찾아 추출합니다.

  • 편집 작업 :

    • diff 미리보기를 통한 2단계 편집 프로세스

    • ID 검증을 통해 텍스트 선택 및 덮어쓰기

    • 선택 → 덮어쓰기 → 확인/취소 패턴으로 편집 워크플로우를 깔끔하게 정리합니다.

    • Python(.py) 및 JavaScript/React(.js, .jsx) 파일에 대한 구문 검사

    • 콘텐츠로 새 파일을 만듭니다

  • 파일 관리 :

    • 적절한 초기화로 새 파일을 만듭니다.

    • 파일 시스템에서 파일 삭제

    • listdir 로 디렉토리 내용 나열

  • 테스트 지원 :

    • run_tests 로 Python 테스트 실행

    • 적절한 모듈 확인을 위한 Python 경로 설정

  • 안전 기능 :

    • 충돌 방지를 위한 콘텐츠 ID 확인

    • 리소스 고갈을 방지하기 위한 줄 수 제한

    • 코드 무결성을 유지하기 위한 구문 검사

    • 민감한 파일에 대한 액세스를 제한하는 보호된 경로

Related MCP server: MCP File Manager

보안 위험

editor-mcp에는 특정 보안 고려 사항과 함께 제공되는 강력한 기능이 포함되어 있습니다.

  • 탈옥 위험 : editor-mcp는 유해한 명령어가 내장된 파일을 읽을 때 잠재적으로 탈옥될 수 있습니다. 편집 중인 파일의 악성 콘텐츠에는 AI 비서를 조작하는 명령어가 포함되어 있을 수 있습니다.

  • 임의 코드 실행 : 테스트 실행이 활성화된 경우 조작된 테스트 파일이나 악성 Python 코드를 통해 임의 코드가 실행될 위험이 있습니다.

  • 데이터 노출 : 적절한 경로 보호가 구성되지 않은 경우 파일 시스템 작업에 액세스하면 잠재적으로 중요한 정보가 노출될 수 있습니다.

이러한 위험을 완화하려면:

  1. PROTECTED_PATHS 환경 변수를 사용하여 중요한 파일과 디렉토리에 대한 액세스를 제한합니다.

  2. 절대적으로 필요하지 않는 한, 프로덕션 환경에서 테스트 실행 기능을 비활성화합니다.

  3. 특히 신뢰할 수 없는 출처에서 온 파일이라면 열기 전에 주의 깊게 검토하세요.

  4. 권한이 제한된 샌드박스 환경에서 편집기를 실행하는 것을 고려하세요.

LLM의 주요 장점

이 텍스트 편집기의 독특한 디자인은 일반적으로 LLM 코드 편집에 영향을 미치는 중요한 문제를 해결합니다.

  • 컨텍스트 손실 방지 - 기존 방식에서는 LLM이 몇 번의 수정 후 코드베이스에 대한 전반적인 정보를 잃는 경우가 많았습니다. 이 구현 방식은 다단계 프로세스를 통해 컨텍스트를 유지합니다.

  • 리소스 소모가 많은 재작성 방지 - LLM은 일반적으로 혼동 시 전체 파일을 교체하는 방식으로 작동하는데, 이는 비용이 많이 들고 느리며 비효율적입니다. 이 편집기는 선택적 편집을 지원합니다.

  • 시각적 피드백 제공 - diff 미리보기 시스템을 통해 LLM은 변경 사항을 커밋하기 전에 실제로 변경 사항을 보고 확인할 수 있으므로 오류가 크게 줄어듭니다.

  • 구문 검사 강화 - Python 및 JavaScript/React에 대한 자동 검증을 통해 깨진 코드가 커밋되지 않도록 보장합니다.

  • 편집 추론 개선 - 다단계 접근 방식은 LLM이 단계 사이에서 추론할 시간을 제공하여 무질서한 토큰 생성을 줄입니다.

자원 관리

편집기는 시스템 안정성을 보장하고 리소스 고갈을 방지하기 위해 여러 가지 보호 장치를 구현합니다.

  • 최대 편집 줄 수 : 기본적으로 편집기는 단일 편집 작업에 대해 50줄 제한을 적용합니다.

설치

이 MCP는 Claude Desktop을 사용하여 개발 및 테스트되었습니다. 모든 플랫폼에서 Claude Desktop을 다운로드할 수 있습니다. Linux용 Claude Desktop의 경우, 공식 파일 기반의 비공식 설치 스크립트를 사용할 수 있습니다. 권장 저장소는 https://github.com/emsi/claude-desktop/tree/main 입니다.

Claude Desktop을 설치한 후 아래 지침에 따라 해당 MCP를 설치하세요.

UVX를 사용한 간편한 설치(권장)

Editor MCP를 설치하는 가장 쉬운 방법은 제공된 설치 스크립트를 사용하는 것입니다.

지엑스피1

이 스크립트는 다음을 수행합니다.

  1. UVX가 설치되어 있는지 확인하고 필요하면 설치하세요.

  2. 개발 모드에서 Editor MCP 설치

  3. PATH에서 editor-mcp 명령을 사용할 수 있도록 설정하세요.

수동 설치

UVX 사용

# Install directly from GitHub
uvx install git+https://github.com/danielpodrazka/mcp-text-editor.git

# Or install from a local clone
git clone https://github.com/danielpodrazka/mcp-text-editor.git
cd mcp-text-editor
uvx install -e .

기존 pip 사용

pip install git+https://github.com/danielpodrazka/mcp-text-editor.git

# Or from a local clone
git clone https://github.com/danielpodrazka/mcp-text-editor.git
cd mcp-text-editor
pip install -e .

요구 사항 사용(레거시)

잠금 파일에서 설치:

uv pip install -r uv.lock

잠긴 요구 사항 파일 생성:

uv pip compile requirements.in -o uv.lock

용법

서버 시작

설치 후 다음 방법 중 하나를 사용하여 Editor MCP 서버를 시작할 수 있습니다.

# Using the installed script
editor-mcp

# Or using the Python module
python -m text_editor.server

MCP 구성

MCP 구성 파일에 Editor MCP를 추가할 수 있습니다.

{
  "mcpServers": {
     "text-editor": {
       "command": "editor-mcp",
       "env": {
         "MAX_SELECT_LINES": "100",
         "ENABLE_JS_SYNTAX_CHECK": "0",
         "FAIL_ON_PYTHON_SYNTAX_ERROR": "1",
         "FAIL_ON_JS_SYNTAX_ERROR": "0",
         "PROTECTED_PATHS": "*.env,.env*,config*.json,*secret*,/etc/passwd,/home/user/.ssh/id_rsa"
       }
     }
  }
}

환경 변수 구성

Editor MCP는 동작을 사용자 정의하기 위해 여러 환경 변수를 지원합니다.

  • MAX_SELECT_LINES : "100" - 단일 작업에서 편집할 수 있는 최대 줄 수(기본값은 50)

  • ENABLE_JS_SYNTAX_CHECK : "0" - JavaScript 및 JSX 구문 검사를 활성화/비활성화합니다(기본값은 "1" - 활성화됨)

  • FAIL_ON_PYTHON_SYNTAX_ERROR : "1" - 활성화하면 Python 구문 오류가 발생하면 자동으로 덮어쓰기 작업이 취소됩니다(기본값은 활성화됨).

  • FAIL_ON_JS_SYNTAX_ERROR : "0" - 활성화 시 JavaScript/JSX 구문 오류 발생 시 자동으로 덮어쓰기 작업이 취소됩니다(기본값은 비활성화됨).

  • PROTECTED_PATHS : 액세스할 수 없는 파일 패턴 또는 경로의 쉼표로 구분된 목록, 와일드카드 지원(예: " .env, .env ,/etc/passwd")

소스에서 빌드할 때의 샘플 MCP 구성

{
  "mcpServers": {
     "text-editor": {
       "command": "/home/daniel/pp/venvs/editor-mcp/bin/python",
       "args": ["/home/daniel/pp/editor-mcp/src/text_editor/server.py"],
        "env": {
          "MAX_SELECT_LINES": "100",
          "ENABLE_JS_SYNTAX_CHECK": "0",
          "FAIL_ON_PYTHON_SYNTAX_ERROR": "1",
          "FAIL_ON_JS_SYNTAX_ERROR": "0",
          "PROTECTED_PATHS": "*.env,.env*,config*.json,*secret*,/etc/passwd,/home/user/.ssh/id_rsa"
        }
     }
  }
}

사용 가능한 도구

Editor MCP는 파일 조작, 편집 및 테스트를 위한 13가지 강력한 도구를 제공합니다.

1. set_file

현재 작업할 파일을 설정합니다.

매개변수 :

  • filepath (str): 파일의 절대 경로

반품 :

  • 파일 경로가 포함된 확인 메시지

2. skim

현재 파일에서 전체 텍스트를 읽습니다. 각 줄에는 줄 번호가 접두사로 붙습니다.

반품 :

  • 줄 번호, 줄의 총 수, 최대 편집 줄 설정이 포함된 줄 사전

출력 예 :

{
  "lines": [
    [1, "def hello():"],
    [2, "    print(\"Hello, world!\")"],
    [3, ""],
    [4, "hello()"]
  ],
  "total_lines": 4,
  "max_select_lines": 50
}

3. read

현재 파일의 시작 줄부터 끝 줄까지 텍스트를 읽습니다.

매개변수 :

  • start (int): 시작 줄 번호(1부터 시작하는 인덱싱)

  • end (int): 줄 끝 번호(1부터 시작하는 인덱싱)

반품 :

  • 줄 번호를 키로 하는 줄과 시작 및 끝 줄 정보를 포함하는 사전

출력 예 :

{
  "lines": [
    [1, "def hello():"],
    [2, "    print(\"Hello, world!\")"],
    [3, ""],
    [4, "hello()"]
  ],
  "start_line": 1,
  "end_line": 4
}

4. select

이후 덮어쓰기 작업을 위해 현재 파일에서 줄 범위를 선택합니다.

매개변수 :

  • start (int): 시작 줄 번호(1부터 시작)

  • end (int): 줄 끝 번호(1부터 시작)

반품 :

  • 선택된 라인, 라인 범위, 검증을 위한 ID를 포함하는 사전

메모 :

  • 이 도구는 max_select_lines에 대한 선택을 검증합니다.

  • 선택 세부 정보는 덮어쓰기 도구에서 사용하기 위해 저장됩니다.

  • 덮어쓰기 도구를 호출하기 전에 이것을 사용해야 합니다.

5. overwrite

현재 파일의 특정 줄을 새 텍스트로 덮어쓸 준비를 합니다.

매개변수 :

  • new_lines (목록): 선택한 범위를 덮어쓸 새 줄 목록

반품 :

  • 제안된 변경 사항을 보여주는 Diff 미리보기

메모 :

  • 이는 2단계 프로세스의 첫 번째 단계입니다.

    1. 첫 번째 호출 overwrite()를 사용하여 diff 미리보기를 생성합니다.

    2. 그런 다음 Confirm()을 호출하여 보류 중인 변경 사항을 적용하거나 cancel()을 호출하여 보류 중인 변경 사항을 취소합니다.

  • 이 도구를 사용하면 이전에 선택한 줄을 새 콘텐츠로 바꿀 수 있습니다.

  • 새로운 줄의 수는 원래 선택과 다를 수 있습니다.

  • Python 파일(.py 확장자)의 경우 작성 전에 구문 검사가 수행됩니다.

  • JavaScript/React 파일(.js, .jsx 확장자)의 경우 구문 검사는 선택 사항이며 ENABLE_JS_SYNTAX_CHECK 환경 변수를 통해 비활성화할 수 있습니다.

6. confirm

덮어쓰기 작업에서 보류 중인 변경 사항을 적용합니다.

반품 :

  • 상태 및 메시지가 포함된 작업 결과

메모 :

  • 이는 편집 프로세스의 두 번째 단계에서 가능한 두 가지 작업 중 하나입니다.

  • 변경 사항이 성공적으로 적용되면 선택이 제거됩니다.

7. cancel

덮어쓰기 작업에서 보류 중인 변경 사항을 취소합니다.

반품 :

  • 상태 및 메시지가 포함된 작업 결과

메모 :

  • 이것은 편집 프로세스의 두 번째 단계에서 가능한 두 가지 작업 중 하나입니다.

  • 변경 사항이 취소되어도 선택 사항은 그대로 유지됩니다.

8. delete_file

현재 설정된 파일을 삭제합니다.

반품 :

  • 상태 및 메시지가 포함된 작업 결과

9. new_file

새로운 파일을 만듭니다.

매개변수 :

  • absolute_file_path (str): 새 파일의 경로

반품 :

  • 해당되는 경우 콘텐츠의 상태 및 ID가 포함된 작업 결과

메모 :

  • 현재 파일이 존재하고 비어 있지 않으면 이 도구는 실패합니다.

10. find_line

현재 파일에서 제공된 텍스트와 일치하는 줄을 찾습니다.

매개변수 :

  • search_text (str): 파일에서 검색할 텍스트

반품 :

  • 줄 번호와 전체 일치 항목이 포함된 일치하는 줄을 포함하는 사전

출력 예 :

{
  "status": "success",
  "matches": [
    [2, "    print(\"Hello, world!\")"]
  ],
  "total_matches": 1
}

메모 :

  • 파일 경로가 설정되지 않으면 오류가 반환됩니다.

  • 각 줄 내에서 정확한 텍스트 일치 항목을 검색합니다.

  • ID는 후속 편집 작업에 사용될 수 있습니다.

11. find_function

현재 Python 또는 JavaScript/JSX 파일에서 함수나 메서드 정의를 찾습니다.

매개변수 :

  • function_name (str): 찾을 함수 또는 메서드의 이름

반품 :

  • 줄 번호, 시작 줄, 종료 줄을 포함하는 함수 줄을 포함하는 사전

출력 예 :

{
  "status": "success",
  "lines": [
    [10, "def hello():"],
    [11, "    print(\"Hello, world!\")"],
    [12, "    return True"]
  ],
  "start_line": 10,
  "end_line": 12
}

메모 :

  • Python 파일의 경우 이 도구는 Python의 AST 및 tokenize 모듈을 사용하여 데코레이터 및 docstring을 포함한 함수 경계를 정확하게 식별합니다.

  • JavaScript/JSX 파일의 경우 이 도구는 여러 가지 접근 방식을 조합하여 사용합니다.

    • 기본 방법: 사용 가능한 경우 Babel AST 구문 분석(Node.js 및 Babel 패키지 필요)

    • 대체 방법: Babel을 사용할 수 없는 경우 함수 선언에 대한 정규식 패턴 일치

  • 표준 함수, 비동기 함수, 화살표 함수, React 후크를 포함한 다양한 JavaScript 함수 유형을 지원합니다.

  • 파일 경로가 설정되지 않았거나 함수를 찾을 수 없는 경우 오류를 반환합니다.

12. listdir

디렉토리의 내용을 나열합니다.

매개변수 :

  • dirpath (str): 나열할 디렉토리의 경로

반품 :

  • 파일 이름 목록과 쿼리된 경로가 포함된 사전

13. run_tests 및 set_python_path

pytest로 Python 테스트를 실행하고 Python 환경을 구성하기 위한 도구입니다.

  • JavaScript 구문 검사를 비활성화하려면 "0", "false" 또는 "no"로 설정합니다.

  • Babel 및 관련 종속성이 설치되지 않은 경우 유용합니다.

  • FAIL_ON_PYTHON_SYNTAX_ERROR : Python 구문 오류가 발생하면 자동으로 덮어쓰기 작업이 취소되는지 여부를 제어합니다(기본값: 1)

    • 활성화된 경우 Python 파일의 구문 오류로 인해 덮어쓰기 작업이 자동으로 취소됩니다.

    • 선은 선택된 상태로 유지되므로 오류를 수정하고 다시 시도할 수 있습니다.

  • FAIL_ON_JS_SYNTAX_ERROR : JavaScript/JSX 구문 오류가 자동으로 덮어쓰기 작업을 취소할지 여부를 제어합니다(기본값: 0)

    • 활성화된 경우 JavaScript/JSX 파일의 구문 오류로 인해 덮어쓰기 작업이 자동으로 취소됩니다.

    • 선은 선택된 상태로 유지되므로 오류를 수정하고 다시 시도할 수 있습니다.

  • DUCKDB_USAGE_STATS : DuckDB 데이터베이스에서 사용 통계를 수집할지 여부를 제어합니다(기본값: 0)

    • 도구 사용 통계 수집을 활성화하려면 "1", "true" 또는 "yes"로 설정하세요.

    • 활성화하면 타임스탬프와 인수를 포함한 각 도구 호출에 대한 정보가 기록됩니다.

  • STATS_DB_PATH : 통계를 위한 DuckDB 데이터베이스가 저장될 경로(기본값: "text_editor_stats.duckdb")

    • DUCKDB_USAGE_STATS 활성화된 경우에만 사용됩니다.

  • PROTECTED_PATHS : 액세스가 거부될 파일 패턴 또는 절대 경로의 쉼표로 구분된 목록

    • 예: *.env,.env*,config*.json,*secret*,/etc/passwd,/home/user/credentials.txt

    • 와일드카드를 모든 위치에 사용할 수 있는 정확한 파일 경로와 유연한 글로브 패턴을 모두 지원합니다.

      • *.env - .env , dev.env , prod.env 와 같이 .env로 끝나는 파일과 일치합니다.

      • .env* - .env , .env.local , .env.production 과 같이 .env로 시작하는 파일과 일치합니다.

      • *secret* - 이름에 'secret'이 포함된 모든 파일과 일치합니다.

    • 중요한 구성 파일 및 자격 증명이 실수로 노출되는 것을 방지합니다.

    • 선은 선택된 상태로 유지되므로 오류를 수정하고 다시 시도할 수 있습니다.

개발

필수 조건

editor-mcp에는 다음이 필요합니다.

  • 파이썬 3.7 이상

  • FastMCP 패키지

  • 검정색(Python 코드 형식 검사용)

  • Babel(해당 파일로 작업하는 경우 JavaScript/JSX 구문 검사를 위해)

개발 종속성 설치:

# Using pip
pip install pytest pytest-asyncio pytest-cov

# Using uv
uv pip install pytest pytest-asyncio pytest-cov

JavaScript/JSX 구문 검증을 위해서는 Node.js와 Babel이 필요합니다. 텍스트 편집기는 다음 파일 형식을 편집할 때 npx babel 사용하여 JS/JSX 구문을 검사합니다.

# Required for JavaScript/JSX syntax checking
npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/preset-react
# You can also install these globally if you prefer
# npm install -g @babel/core @babel/cli @babel/preset-env @babel/preset-react

편집자에게는 다음이 필요합니다.

  • @babel/core 및 @babel/cli - 구문 검사를 위한 핵심 Babel 패키지

  • @babel/preset-env - 표준 JavaScript(.js) 파일용

  • @babel/preset-react - React JSX(.jsx) 파일용

테스트 실행

# Run tests
pytest -v

# Run tests with coverage
pytest -v --cov=text_editor

테스트 구조

테스트 모음에는 다음이 포함됩니다.

  1. set_file 도구

    • 유효한 파일 설정

    • 존재하지 않는 파일 설정

  2. 읽기 도구

    • 파일 상태 검증

    • 전체 파일 읽기

    • 특정 라인 범위 읽기

    • 빈 파일과 같은 예외 상황

    • 잘못된 범위 처리

  3. 선택 도구

    • 라인 범위 검증

    • max_select_lines에 대한 선택 검증

    • 후속 작업을 위한 선택 저장소

  4. 덮어쓰기 도구

    • ID를 사용하여 선택된 콘텐츠 검증

    • 콘텐츠 교체 검증

    • Python 및 JavaScript/React 파일에 대한 구문 검사

    • 변경 사항에 대한 diff 미리보기 생성

  5. 확인 및 취소 도구

    • 보류 중인 변경 사항 적용 또는 취소

    • 2단계 인증 프로세스

  6. delete_file 도구

    • 파일 삭제 검증

  7. new_file 도구

    • 파일 생성 검증

    • 기존 파일 처리

  8. find_line 도구

    • 파일에서 텍스트 일치 항목 찾기

    • 특정 검색어 처리

    • 존재하지 않는 파일에 대한 오류 처리

    • 일치하는 항목이 없는 경우 처리

    • 기존 파일 처리

작동 원리

다단계 편집 접근 방식

LLM이 편집할 줄을 검색하여 바꾸는 것만으로 끝나는 기존 코드 편집 방식(여러 번 편집한 후 혼란이 발생하는 경우가 많음)과 달리 이 편집기는 편집 정확도를 획기적으로 개선하는 구조화된 다단계 워크플로를 구현합니다.

  1. set_file - 먼저 LLM은 편집하려는 파일을 설정합니다.

  2. skim - LLM은 전체 파일을 읽어 전체적인 개요를 파악합니다.

  3. 읽기 - LLM은 더 나은 맥락을 위해 숫자 옆에 줄이 표시된 작업과 관련된 특정 섹션을 조사합니다.

  4. 선택 - 편집할 준비가 되면 LLM은 특정 줄을 선택합니다(구성 가능한 개수로 제한됨, 기본값 50)

  5. 덮어쓰기 - LLM은 대체 콘텐츠를 제안하여 정확히 무엇이 변경될지 보여주는 git diff 스타일 미리보기를 생성합니다.

  6. 확인/취소 - LLM은 미리보기를 검토한 후 변경 사항을 적용하거나 취소할 수 있습니다.

이러한 체계적인 워크플로는 LLM이 각 편집 내용을 신중하게 판단하도록 하고, 실수로 전체 파일을 덮어쓰는 것과 같은 일반적인 오류를 방지합니다. LLM은 변경 내용을 커밋하기 전에 미리 확인하여 편집 내용이 정확한지 확인할 수 있습니다.

신원 확인 시스템

서버는 FastMCP를 사용하여 명확하게 정의된 API를 통해 텍스트 편집 기능을 제공합니다. ID 검증 시스템은 읽기 작업과 수정 작업 사이에 콘텐츠가 변경되지 않았는지 확인하여 데이터 무결성을 보장합니다.

ID 메커니즘은 SHA-256을 사용하여 파일 내용 또는 선택된 줄 범위의 고유 식별자를 생성합니다. 줄별 작업의 경우, ID에는 줄 범위를 나타내는 접두사(예: "L10-15-[해시]")가 포함됩니다. 이를 통해 편집 내용이 예상된 내용에 적용되도록 할 수 있습니다.

구현 세부 사항

주요 TextEditorServer 클래스:

  1. "text-editor"라는 FastMCP 인스턴스로 초기화합니다.

  2. 환경 변수에서 구성 가능한 max_select_lines 제한(기본값: 50)을 설정합니다.

  3. 현재 파일 경로를 상태로 유지합니다.

  4. FastMCP를 통해 13개의 주요 도구를 등록합니다.

    • set_file : 현재 파일 경로를 검증하고 설정합니다.

    • skim : 파일의 전체 내용을 읽고 줄 번호 사전을 줄 텍스트로 반환합니다.

    • read : 지정된 줄 범위에서 줄을 읽고 줄 내용의 구조화된 사전을 반환합니다.

    • select : 이후 덮어쓰기 작업을 위한 줄을 선택합니다.

    • overwrite : 새 줄 목록을 가져와서 콘텐츠 변경에 대한 diff 미리보기를 준비합니다.

    • confirm : 덮어쓰기 작업에서 보류 중인 변경 사항을 적용합니다.

    • cancel : 덮어쓰기 작업에서 보류 중인 변경 사항을 취소합니다.

    • delete_file : 현재 파일을 삭제합니다

    • new_file : 새 파일을 만듭니다

    • find_line : 특정 텍스트가 포함된 줄을 찾습니다.

    • find_function : Python 및 JavaScript/JSX 파일에서 함수 또는 메서드 정의를 찾습니다.

    • listdir : 디렉토리의 내용을 나열합니다

    • run_tests 및 set_python_path : Python 테스트 실행 도구

서버는 기본적으로 FastMCP의 stdio 전송을 사용하여 실행되므로 다양한 클라이언트와 쉽게 통합할 수 있습니다.

최상의 결과를 위한 시스템 프롬프트

AI 어시스턴트를 이용해 최적의 결과를 얻으려면 AI가 관리 가능하고 안전한 편집을 수행하도록 안내하는 시스템 프롬프트( system_prompt.md 참조)를 사용하는 것이 좋습니다.

이 시스템 프롬프트는 AI 도우미에게 다음과 같은 도움을 줍니다.

  1. 증분적 변경 사항 만들기 - 편집 내용을 더 작은 부분으로 나누기

  2. 코드 무결성 유지 - 코드 기능을 유지하는 변경 사항 만들기

  3. 리소스 제한 내에서 작업 - 시스템에 과부하를 일으킬 수 있는 작업 방지

  4. 검증 워크플로우를 따르세요 - 편집 후 오류에 대한 최종 확인 수행

AI 도우미를 사용할 때 이 시스템 프롬프트를 통합하면 더욱 안정적인 편집 동작을 얻을 수 있고 자동 코드 편집에서 흔히 저지르는 실수를 피할 수 있습니다.

예제.png

사용 통계

텍스트 편집기 MCP를 활성화하면 사용 통계를 수집하여 편집 도구가 어떻게 사용되고 있는지에 대한 통찰력을 제공할 수 있습니다.

  • 데이터 수집 : DUCKDB_USAGE_STATS 활성화되면 DuckDB 데이터베이스에 통계가 수집됩니다.

  • 추적된 정보 : 도구 이름, 인수, 타임스탬프, 현재 파일 경로, 도구 응답 및 요청/클라이언트 ID를 기록합니다.

  • 저장 위치 : 데이터는 STATS_DB_PATH 로 지정된 DuckDB 파일에 저장됩니다.

  • 개인정보 보호 : 모든 것이 로컬 컴퓨터에 저장됩니다.

수집된 통계는 사용 패턴을 이해하고, 일반적인 워크플로를 파악하고, 가장 빈번한 작업에 맞게 편집기를 최적화하는 데 도움이 될 수 있습니다.

DuckDB 클라이언트를 통해 표준 SQL을 사용하여 데이터베이스를 쿼리하여 사용 패턴을 분석할 수 있습니다.

문제 해결

문제가 발생하는 경우:

  1. 파일 권한 확인

  2. 파일 경로가 절대 경로인지 확인하세요

  3. 환경이 Python 3.7+를 사용하고 있는지 확인하세요.

영감

비슷한 프로젝트에서 영감을 얻었습니다: https://github.com/tumf/mcp-text-editor . 처음에는 포크했지만, 전반적인 아이디어만 그대로 유지하기 위해 전체 코드베이스를 처음부터 다시 쓰기로 결정했습니다.

Available Tools

14 tools
cancelD

Cancel action

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Cancel action' gives no information about what the tool actually does behaviorally - whether it's a read-only status change, a destructive operation, what permissions are required, what side effects occur, or what the typical response looks like. The description is completely inadequate for understanding the tool's behavior.

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

Conciseness2/5

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

While 'Cancel action' is extremely brief, this is under-specification rather than effective conciseness. The two words fail to provide necessary information about the tool's purpose and usage. True conciseness would efficiently convey essential information, but this description is so sparse that it's essentially non-functional as documentation.

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

Completeness2/5

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

Given that the tool has no parameters but likely performs some meaningful action (cancellation), the description is incomplete. With no annotations to provide behavioral context and a description that offers only the most minimal information, an agent would struggle to understand when and how to use this tool appropriately. The existence of an output schema helps somewhat, but the description itself provides insufficient context 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.

Parameters4/5

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

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the parameter situation (none). The description doesn't need to compensate for any parameter documentation gaps. The baseline for zero parameters with full schema coverage is 4, as there are no parameters whose semantics need explanation beyond what the schema provides.

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 'Cancel action' is a tautology that essentially restates the tool name 'cancel'. It doesn't specify what type of action gets canceled, what resource is affected, or what the cancellation entails. While the name suggests a general cancellation function, the description adds no meaningful clarification beyond the name itself.

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

Usage Guidelines1/5

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

The description provides absolutely no guidance on when to use this tool versus alternatives. With sibling tools like 'confirm', 'delete_file', 'overwrite', and others that might represent different actions or states, there's no indication of what context triggers a cancellation, what prerequisites exist, or what alternatives might be appropriate in different scenarios.

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

confirmC

Confirm action

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. 'Confirm action' implies a mutation (confirmation typically changes state), but it doesn't specify what gets confirmed, whether it's reversible, what permissions are needed, or what the response contains. This leaves significant gaps for a tool that likely modifies workflow state.

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 extremely concise ('Confirm action') but arguably under-specified rather than efficiently informative. While it wastes no words, it fails to provide the minimal context needed to understand what's being confirmed, making this brevity problematic rather than virtuous.

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

Completeness2/5

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

Given the tool likely performs a state-changing confirmation (implied by the name and sibling tools like 'cancel'), the description is incomplete. With no annotations, no parameter documentation needed, but an output schema exists, the description should at least clarify what action is confirmed and in what context, which it fails to do.

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 with 100% schema description coverage, so the schema already fully documents the absence of inputs. The description doesn't need to compensate for any parameter gaps, and 'Confirm action' appropriately implies no additional inputs are required for a simple confirmation operation.

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 'Confirm action' is a tautology that essentially restates the tool name 'confirm' without specifying what action is being confirmed or what resource is involved. It provides no differentiation from sibling tools like 'cancel' or 'select' that might also involve confirmation-like operations.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description doesn't indicate what context triggers its use, what prerequisites exist, or how it differs from sibling tools like 'cancel' (which might abort an action) or 'select' (which might choose among options).

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

delete_fileC

Delete current file

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states the action without behavioral details. It doesn't disclose if deletion is permanent, requires permissions, has side effects, or what happens on success/failure. 'Delete' implies destructive mutation, but specifics are missing.

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?

Extremely concise at two words, front-loaded with the core action. Every word earns its place with no wasted text, though this brevity contributes to vagueness in other dimensions.

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

Completeness2/5

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

For a destructive mutation tool with no annotations, the description is incomplete. It lacks context on what 'current' means, deletion behavior, permissions, or output. The presence of an output schema helps, but the description doesn't leverage it to explain return values or error conditions.

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 coverage, so no parameter documentation is needed. The description doesn't add param info, but that's appropriate here, meeting the baseline for zero-param tools.

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 'Delete current file' clearly states the action (delete) and target (current file), but it's vague about what 'current' refers to in context. It doesn't distinguish this from potential sibling operations like 'overwrite' or 'cancel' that might also modify files.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'overwrite' or 'cancel'. The description implies it's for deletion but doesn't specify prerequisites, conditions, or what makes a file 'current'.

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

find_functionA

Find a function or method definition in a Python or JS/JSX file. Uses AST parsers.

Args: function_name (str): Name of the function or method to find

Returns: dict: function lines with their line numbers, start_line, and end_line

ParametersJSON Schema
NameRequiredDescriptionDefault
function_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the tool's behavior: it finds function/method definitions using AST parsers and returns line numbers and ranges. However, it doesn't mention error handling (e.g., if file doesn't exist or function isn't found), performance characteristics, or whether it searches recursively in directories. It adds value beyond the minimal schema but lacks comprehensive 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 efficiently structured with a clear purpose statement followed by Args and Returns sections. Every sentence earns its place: the first sentence defines the tool's core functionality, and the subsequent lines provide essential parameter and return value 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's moderate complexity (AST parsing across two languages), no annotations, and an output schema that likely defines the return dict structure, the description is reasonably complete. It covers what the tool does, the parameter meaning, and return format. However, it could better address error cases or language-specific quirks (e.g., JSX vs JS differences) for full 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 schema has 0% description coverage, so the description must compensate. It clearly explains the single parameter 'function_name' as 'Name of the function or method to find', which adds essential semantic meaning not present in the bare schema. However, it doesn't specify case-sensitivity, partial matching, or handling of nested methods (e.g., 'ClassName.method_name'), leaving some ambiguity.

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 ('Find a function or method definition'), the target resources ('in a Python or JS/JSX file'), and the implementation method ('Uses AST parsers'). It distinguishes itself from siblings like 'find_line' (general line search) and 'skim' (likely file overview) by focusing specifically on function/method definitions with AST parsing.

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 by specifying 'Python or JS/JSX file' and 'function or method definition', suggesting it should be used when searching for function definitions in those file types. However, it doesn't explicitly state when NOT to use it or name alternatives like 'find_line' for non-function searches or 'skim' for file overviews.

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

find_lineA

Find lines that match provided text in the current file.

Args: search_text (str): Text to search for in the file

Returns: dict: Matching lines with their line numbers, and full text

ParametersJSON Schema
NameRequiredDescriptionDefault
search_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the tool finds matching lines but does not disclose behavioral traits such as case sensitivity, regex support, search scope (e.g., whole file vs. visible portion), or performance considerations (e.g., large file handling). The description is minimal beyond the basic operation.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured Args and Returns sections. Every sentence earns its place with no redundant information, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool's low complexity (one parameter) and the presence of an output schema (which covers return values), the description is mostly complete. It explains what the tool does and the parameter, but lacks behavioral details (e.g., search behavior) that would be helpful despite the output schema.

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

Parameters4/5

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

With 0% schema description coverage (schema has no descriptions), the description must compensate. It adds meaning by specifying that 'search_text' is 'Text to search for in the file', clarifying the parameter's purpose. However, it does not detail constraints (e.g., length, special characters) or examples, leaving some gaps.

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 ('Find lines that match provided text') and resource ('in the current file'), distinguishing it from siblings like 'find_function' (which likely searches for functions) and 'read' (which reads the entire file). The verb+resource combination is precise and unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for text matching in a file, but does not explicitly state when to use this tool versus alternatives like 'find_function' (for functions) or 'skim' (purpose unclear). No exclusions or prerequisites are mentioned, leaving the agent to infer context from tool names alone.

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

listdirD
ParametersJSON Schema
NameRequiredDescriptionDefault
dirpathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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

Parameters1/5

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

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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

new_fileA

Creates a new file.

After creating new file, the first line is automatically selected for editing. Automatically creates parent directories if they don't exist.

Args: filepath (str): Path of the new file Returns: dict: Status message with selection info

ParametersJSON Schema
NameRequiredDescriptionDefault
filepathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it creates a file, automatically selects the first line for editing, and creates parent directories if missing. This covers mutation behavior and side effects, though it doesn't mention permissions, error handling, or rate limits, which are gaps for a tool with no annotations.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by important behavioral details, and ends with structured Args and Returns sections. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool's moderate complexity (file creation with side effects), no annotations, and an output schema present, the description is fairly complete. It explains the action, behavioral traits, and parameter semantics, but could improve by addressing error cases or interaction with siblings. The output schema handles return values, so the description's focus on other aspects is appropriate.

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 description adds meaningful context for the single parameter 'filepath' by explaining it's the 'Path of the new file', which clarifies its purpose beyond the schema's basic type definition. With 0% schema description coverage and only one parameter, this compensation is effective, though it doesn't detail format constraints or examples.

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 the verb 'creates' and resource 'new file', making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'overwrite' or 'set_file', which might also involve file creation or modification, leaving room for ambiguity in tool selection.

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 creating new files and automatically handling parent directories, but provides no explicit guidance on when to use this tool versus alternatives like 'overwrite' or 'set_file'. It mentions automatic post-creation actions (first line selection), which hints at context, but lacks clear when-to-use or when-not-to-use directives.

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

overwriteB

Overwrite the selected lines with new text. Amount of new lines can differ from the original selection

Args: new_lines (dict): Example: {"lines":["line one", "second line"]}

Returns: dict: Diff preview showing the proposed changes, and any syntax errors for JS or Python

ParametersJSON Schema
NameRequiredDescriptionDefault
new_linesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool overwrites lines and returns a diff preview with syntax errors for JS or Python, which adds useful context about output and language-specific behavior. However, it lacks details on permissions, side effects (e.g., whether changes are immediate or require confirmation), or error handling, leaving gaps for a mutation tool.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by key behavioral details. The Args and Returns sections are structured but could be more integrated. There's minimal waste, though the example in Args might be slightly verbose; overall, it earns its place efficiently.

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

Completeness3/5

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

Given the tool's complexity (mutation with 1 parameter, nested objects, and an output schema), the description is partially complete. It explains the action and return values, and the output schema likely covers the diff preview details, reducing the burden. However, with no annotations and low schema coverage, it misses critical context like safety, prerequisites, and full parameter semantics, making it adequate but with clear gaps.

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?

The schema description coverage is 0%, so the description must compensate. It provides an example for the 'new_lines' parameter (a dict with a 'lines' key containing an array of strings), which adds meaning beyond the generic object type in the schema. However, it doesn't explain the structure fully (e.g., other possible keys, constraints) or cover nested object details, resulting in incomplete parameter documentation.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Overwrite the selected lines with new text' specifies the verb (overwrite) and resource (selected lines). It distinguishes from siblings like 'delete_file' or 'set_file' by focusing on line-level text replacement rather than file operations. However, it doesn't explicitly differentiate from similar text-editing siblings that might exist, keeping it at 4 instead of 5.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description mentions that the amount of new lines can differ from the original selection, which implies a context of line editing, but it doesn't specify prerequisites (e.g., needing a selection first), exclusions, or direct comparisons to siblings like 'set_file' or 'confirm'. This leaves the agent without clear usage instructions.

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

readA

Read lines from the current file from start line to end line, returning them in a dictionary like {"lines":[[1,"text on first line"],[2,"text on second line"]]}. This makes it easier to find the precise lines to select for editing.

Args: start (int, optional): Start line number end (int, optional): End line number

Returns: dict: lines, start_line, end_line

ParametersJSON Schema
NameRequiredDescriptionDefault
startYes
endYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool reads lines and returns them in a specific dictionary format, which is useful. However, it lacks details on error handling, file state changes, or permissions needed, leaving behavioral gaps for a read operation.

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 functionality in the first sentence. The Args and Returns sections are structured but slightly verbose; every sentence adds value, though it could be 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's low complexity, no annotations, and an output schema present, the description is fairly complete. It explains the purpose, parameters, and return format adequately. However, it could improve by addressing error cases or interaction with sibling tools for better 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 schema description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'start' and 'end' are line numbers and are optional in the Args section, clarifying their role in selecting lines. However, it doesn't detail default behaviors or constraints beyond basic types.

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 ('Read lines from the current file') and resource ('current file'), distinguishing it from siblings like 'skim' or 'select'. It precisely defines what the tool does without being vague or tautological.

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

Usage Guidelines3/5

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

The description implies usage for editing by mentioning 'easier to find the precise lines to select for editing', but does not explicitly state when to use this tool versus alternatives like 'skim' or 'find_line'. No exclusions or clear alternatives are provided, 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.

run_testsB

Run pytest tests using the specified Python virtual environment.

Args: test_path (str, optional): Directory or file path containing tests to run test_name (str, optional): Specific test function/method to run verbose (bool, optional): Run tests in verbose mode collect_only (bool, optional): Only collect tests without executing them

Returns: dict: Test execution results including returncode, output, and execution time

ParametersJSON Schema
NameRequiredDescriptionDefault
test_pathNo
test_nameNo
verboseNo
collect_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but provides minimal behavioral context. It mentions the tool runs tests in a virtual environment but doesn't disclose critical behaviors like: whether it modifies files, what happens if tests fail, if it requires specific permissions, execution timeouts, or how results are structured beyond the basic return dict. The description doesn't contradict annotations (none exist).

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 (purpose statement, Args, Returns) and appropriately sized. The opening sentence efficiently states the core purpose. The Args section is necessary given the 0% schema coverage. Only minor improvement possible by integrating parameter explanations more seamlessly.

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 4 parameters with 0% schema coverage and no annotations, the description does a good job explaining parameters and return values. However, for a test execution tool that could have significant behavioral implications (modifying state, long-running processes, failure modes), the description lacks important context about execution environment, error handling, and behavioral constraints that would be needed for safe agent use.

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% schema description coverage, the description compensates well by clearly explaining all 4 parameters in the Args section, adding meaningful context about what each parameter controls. The description provides semantic value beyond the bare schema by explaining test_path accepts 'Directory or file path', test_name is for 'Specific test function/method', and what collect_only actually does ('Only collect tests without executing them').

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

Purpose5/5

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

The description clearly states the specific action ('Run pytest tests') and resource ('using the specified Python virtual environment'), distinguishing it from all sibling tools which are file/function operations rather than test execution. The verb 'Run' is precise and unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. While it's clearly for running pytest tests, there's no mention of prerequisites (e.g., needing a virtual environment setup), when to use collect_only versus full execution, or how it relates to other testing tools (none exist among siblings).

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

selectC

Select lines from for subsequent overwrite operation.

Args: start (int): Start line number (1-based) end (int): End line number (1-based)

Returns: dict: status, lines, start, end, id, line_count, message

ParametersJSON Schema
NameRequiredDescriptionDefault
startYes
endYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but provides minimal behavioral information. It mentions this is for a 'subsequent overwrite operation' which implies this is a preparatory step, but doesn't describe what happens during the selection (does it lock lines? create a temporary buffer? require specific permissions?). No information about side effects, error conditions, 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.

Conciseness4/5

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

The description is appropriately brief with clear sections (purpose statement, Args, Returns). The first sentence could be more polished ('Select lines from' is incomplete), but overall the structure is efficient with no wasted words. Each section serves a clear purpose.

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 there's an output schema (Returns section), the description doesn't need to explain return values in detail. However, for a tool with no annotations and only 2 parameters, the description provides adequate but minimal context. It explains what the tool does and documents parameters, but lacks information about error conditions, prerequisites, or how it integrates with the 'overwrite' sibling 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?

The description includes an Args section that clearly documents both parameters with their types and meaning (line numbers, 1-based). With 0% schema description coverage and only 2 parameters, this documentation fully compensates for the schema gap. The parameter information is complete and adds meaningful context beyond the bare schema.

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 'Select lines from for subsequent overwrite operation' which indicates a selection function but is grammatically awkward and vague about what resource is being selected from. It distinguishes from siblings like 'overwrite' by indicating this is a preparatory step, but doesn't clarify what type of content or file is involved.

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 mentions this is 'for subsequent overwrite operation' which provides some context about when to use it, but doesn't explicitly state when NOT to use it or what alternatives exist. No guidance is given about prerequisites or how this tool relates to other file operations 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.

set_fileA

Set the current file to work with.

This is always the first step in the workflow. You must set a file before you can use other tools like read, select etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
filepathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the tool sets a file as a prerequisite for other operations, implying a stateful context, but doesn't disclose behavioral traits like whether the file must exist, what happens on invalid paths, if this persists across sessions, or any error conditions. For a tool with no annotations, this leaves significant gaps.

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

Conciseness5/5

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

The description is concise and well-structured: two sentences that efficiently convey purpose and usage guidelines without redundancy. Every sentence adds value, and it's front-loaded with the core action.

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

Completeness3/5

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

Given the tool's moderate complexity (stateful operation with a prerequisite role), no annotations, and an output schema present (which may cover return values), the description is partially complete. It explains the workflow role but lacks details on parameter semantics and behavioral transparency, making it adequate but with clear 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?

The input schema has 1 parameter with 0% description coverage. The description doesn't add any meaning beyond the schema—it doesn't explain what 'filepath' represents (e.g., absolute/relative path, format, constraints). With low schema coverage, the description fails to compensate, but since there's only one parameter, the baseline is slightly higher than minimal.

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: 'Set the current file to work with.' This is a specific verb ('set') and resource ('current file'), making the action understandable. However, it doesn't explicitly differentiate from sibling tools like 'new_file' or 'delete_file' beyond workflow context.

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: 'This is always the first step in the workflow. You must set a file before you can use other tools like read, select etc.' It clearly states when to use it (first step) and why (prerequisite for other tools), with named alternatives mentioned.

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

set_python_pathB

Set it before running tests so the project is correctly recognized

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It implies a configuration change ('set') but doesn't disclose behavioral traits like whether it's persistent, requires specific permissions, or has side effects. For a mutation tool with no annotations, this is inadequate.

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 is front-loaded with the key information. It wastes no words and is appropriately sized for its purpose, earning full marks for conciseness.

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

Completeness2/5

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

Given the tool's complexity as a configuration setter with no annotations, no output schema, and low schema coverage, the description is incomplete. It lacks details on behavior, parameter usage, and expected outcomes, making it insufficient for effective tool invocation.

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

Parameters2/5

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

The input schema has 1 parameter with 0% description coverage, and the tool description doesn't add any meaning about the 'path' parameter. It fails to explain what the path represents, its format, or examples, leaving the parameter semantics unclear.

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 is to 'set' something 'before running tests' for project recognition, which is clear but vague. It doesn't specify what exactly is being set (Python path) or distinguish it from siblings like 'set_file', making it moderately helpful but lacking specificity.

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 context for when to use it ('before running tests'), which is helpful guidance. However, it doesn't mention when not to use it or alternatives among siblings, such as how it differs from 'set_file', leaving some gaps in usage differentiation.

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

skimA

Read text from the current file, truncated to the first SKIM_MAX_LINES lines.

Returns: dict: lines, total_lines, max_select_lines

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it's a read operation (implied by 'Read text'), truncates output based on `SKIM_MAX_LINES`, and returns a dict with specific keys. However, it doesn't mention permissions, error conditions, or how `SKIM_MAX_LINES` is defined (e.g., environment variable, default value), leaving some gaps.

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

Conciseness5/5

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

The description is highly concise and well-structured: the first sentence states the core action and constraint, and the second sentence clearly outlines the return format. Every sentence earns its place with no wasted words, making it easy to parse and front-loaded with essential information.

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

Completeness4/5

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

Given the tool's low complexity (0 parameters, read-only operation) and the presence of an output schema (implied by 'Returns: dict'), the description is mostly complete. It covers purpose, behavior, and output structure. However, it lacks details on `SKIM_MAX_LINES` (e.g., source or default) and any prerequisites (e.g., needing a file set via 'set_file'), which would enhance completeness for an agent.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on behavior and output. A baseline of 4 is applied since no parameters exist, and the description adds value by explaining the tool's operation beyond the empty schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Read text from the current file') and resource ('current file'), distinguishing it from siblings like 'read' (which presumably reads the entire file) by specifying truncation behavior. It explicitly mentions the truncation limit ('first `SKIM_MAX_LINES` lines'), making the scope 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 specifying it reads from 'the current file' (suggesting a file must already be selected/opened) and truncates output, which differentiates it from tools like 'read' (full file reading) or 'select' (line selection). However, it doesn't explicitly state when NOT to use it or name alternatives, missing full sibling differentiation.

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.

  1. 10 tool updatesv1.0.0
    • Changedfind_function1 field changed
      • removedInput schema / properties / function_name / title
        Removed value: -"Function Name"
    • Changedfind_line1 field changed
      • removedInput schema / properties / search_text / title
        Removed value: -"Search Text"
    • Changedlistdir1 field changed
      • removedInput schema / properties / dirpath / title
        Removed value: -"Dirpath"
    • Changednew_file1 field changed
      • removedInput schema / properties / filepath / title
        Removed value: -"Filepath"
    • Changedoverwrite1 field changed
      • removedInput schema / properties / new_lines / title
        Removed value: -"New Lines"
    • Changedread2 fields changed
      • removedInput schema / properties / end / title
        Removed value: -"End"
      • removedInput schema / properties / start / title
        Removed value: -"Start"
    • Changedrun_tests4 fields changed
      • removedInput schema / properties / collect_only / title
        Removed value: -"Collect Only"
      • removedInput schema / properties / test_name / title
        Removed value: -"Test Name"
      • removedInput schema / properties / test_path / title
        Removed value: -"Test Path"
      • removedInput schema / properties / verbose / title
        Removed value: -"Verbose"
    • Changedselect2 fields changed
      • removedInput schema / properties / end / title
        Removed value: -"End"
      • removedInput schema / properties / start / title
        Removed value: -"Start"
    • Changedset_file3 fields changed
      • removedInput schema / properties / filepath / title
        Removed value: -"Filepath"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedset_python_path1 field changed
      • removedInput schema / properties / path / title
        Removed value: -"Path"
  2. 14 tool updates
    • First observedcancel
    • First observedconfirm
    • First observeddelete_file
    • First observedfind_function
    • First observedfind_line
    • First observedlistdir
    • First observednew_file
    • First observedoverwrite
    • First observedread
    • First observedrun_tests
    • First observedselect
    • First observedset_file
    • First observedset_python_path
    • First observedskim

TDQS

C2.8/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have distinct purposes, but 'cancel' and 'confirm' are ambiguous without context, and 'find_function' and 'find_line' could be confused as both search within files. The core editing tools like 'read', 'select', and 'overwrite' are clearly differentiated, supporting a coherent workflow.

Naming Consistency3/5

The naming is mixed with some consistency: verbs like 'find', 'set', and 'run' are used, but patterns vary (e.g., 'listdir' vs. 'new_file', 'overwrite' vs. 'select'). There's no uniform verb_noun structure, making it readable but not predictable across all tools.

Tool Count5/5

With 14 tools, this is well-scoped for an editor server, covering file operations, editing, searching, and testing. Each tool serves a specific role in the workflow, and the count is neither too sparse nor overwhelming for the domain.

Completeness4/5

The toolset provides strong coverage for file editing and testing workflows, including create, read, update, and delete operations. Minor gaps exist, such as no explicit 'save' or 'undo' tools, but agents can work around these using existing tools like 'overwrite' and workflow steps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A FastMCP server providing powerful code editing tools including precise file modifications with diff-based operations, file creation and reading with line numbers, and more tools for code editing workflows.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides tools for secure file management within a dedicated workspace directory. It enables users to create, list, and delete files through natural language while preventing path traversal attacks.
    6 npm
    -
  • F
    license
    B
    quality
    C
    maintenance
    An MCP server for creating, loading, and editing RFC TXT documents using the rfc-editor Python library. It provides a suite of tools to manage document components including sections, abstracts, titles, and author metadata.
    29
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that provides line-oriented text file editing capabilities through a standardized API. Optimized for LLM tools with efficient partial file access to minimize token usage.
    MIT