Skip to main content
Glama

DevTwin MCP

AI 코딩 에이전트에게 로컬 개발 환경에 대한 실시간 구조화된 이해를 제공합니다.

DevTwin은 AI 코딩 에이전트의 핵심 질문 하나에 답하는 Model Context Protocol(MCP) 서버입니다: 이 개발자의 환경이 왜 다르거나, 고장났거나, 비정상인가?

프로젝트 기술 스택을 감지하고, 설치된 런타임 버전을 프로젝트가 실제로 요구하는 버전과 대조하며, 의존성 및 잠금 파일 상태를 검사하고, 필요한 로컬 서비스(Postgres, Redis 등)와 해당 서비스의 실행 여부를 찾아내며, 포트와 Git 상태를 확인하고, 이 모든 것을 구조화된 증거 기반 진단으로 변환합니다 -- 환경을 클라우드 백엔드로 전송하지 않으며, 비밀 값을 모델에 노출하지도 않습니다.

목차

Related MCP server: devscope

DevTwin이 존재하는 이유

  • AI 코딩 에이전트는 코드를 잘 읽지만, 코드가 실제로 실행되는 환경에 대해서는 알지 못합니다.

  • "내 컴퓨터에서 npm test가 왜 실패하지?"라는 질문은 대개 코드와는 무관합니다 -- Node 버전 불일치, 실행 중이지 않은 서비스, 또는 설치되지 않은 의존성 때문입니다.

  • DevTwin은 에이전트에게 시니어 엔지니어가 직접 수집하는 것과 동일한 신호 -- node --version, git status, lsof -i :5432, docker ps -- 를 추측이 아닌 구조화된 도구 호출로 제공합니다.

FAQ: Claude CLI에는 이미 셸이 있는데 왜 MCP가 필요한가?

이것은 보통 개발자가 가장 먼저 묻는 질문이며, 타당한 질문입니다. 이미 Bash 도구가 있는 Claude Code와 같은 클라이언트에서는 node --version, docker ps, lsof -i :5432 등을 직접 실행하라고 요청하면 됩니다 -- MCP 서버가 필요 없습니다. DevTwin이 해결하는 격차는 "이것이 아예 가능한가"의 문제가 아니라 다음과 같습니다:

DevTwin 없이 (원시 Bash)

DevTwin 사용 시

에이전트가 무엇이든 실행할 수 있으며, 의도치 않게 파괴적인 명령도 실행할 수 있습니다.

임의 실행 제로 -- 읽기 전용/안전한 검사만 허용하는 고정 허용 목록. 보안 모델 참조.

세션마다 다른 조사 방법을 선택하며, 생태계의 엣지 케이스(Gradle wrapper vs. 시스템 Gradle, .nvmrc vs. package.json engines)를 놓칠 수 있습니다.

모든 생태계에 대해 동일한 검증된 검사를 매번 수행합니다.

cat .env 같은 명령이 실제 비밀 값을 대화에 직접 가져올 수 있습니다.

구조적으로 비밀 값을 반환하지 않습니다 -- 존재 여부만 확인합니다. 개인정보 보호 모델 참조.

셸 도구가 있는 클라이언트에서만 작동합니다 (Claude Desktop, 일부 IDE 플러그인에서는 불가).

셸 유무와 관계없이 모든 MCP 클라이언트에서 작동합니다.

한 번의 실패를 진단하는 데 약 6회의 개별 왕복이 필요합니다.

1회 호출. 실제 사례 참조.

Claude CLI에 대한 솔직한 답변: 이미 Bash가 있으므로 DevTwin의 이점은 "없던 기능"보다는 안전성 보장과 일관된 구조화된 출력입니다 -- 완전히 새로운 접근 권한이 아닙니다. 이것이 무료가 아닌 이유이기도 합니다 -- 연결 시 실제 비용과 가치가 있는 시점은 토큰 비용을 참조하세요.

도입 전에 물어볼 만한 몇 가지 추가 질문:

"이것은 단지 doctor 스크립트(make doctor, bin/setup)에 단계가 추가된 것 아닌가?" 개념적으로는 그렇습니다 -- 많은 성숙한 저장소가 이미 직접 작성하고 있습니다. DevTwin의 차별점은 대부분의 저장소에는 그런 것이 없고, 생태계별로 좋은 스크립트를 작성하는 것은 실제 작업이며, 그 출력은 사람이 읽는 일반 텍스트가 아니라 에이전트가 추론할 수 있는 구조화된 JSON이며, 프로젝트마다 각자의 규칙과 사각지대를 가진 맞춤 스크립트 대신 동일한 10개 도구가 모든 저장소에서 동일하게 작동한다는 점입니다.

"Claude / Claude Code에서만 작동하나요?" 아닙니다. DevTwin은 표준 Model Context Protocol을 사용합니다 -- 모든 MCP 호환 클라이언트(Claude Desktop, Cursor, Windsurf 등)가 동일한 방식으로 연결할 수 있습니다. Claude 전용 기능은 없습니다.

"의존해도 안전한가요 -- 활발히 유지관리되나요?" Alpha 상태이며 신생 프로젝트입니다 -- 의존하는 워크플로우에 적용하기 전에 코드를 읽어보세요(짧습니다). 다른 새로운 개발 도구 의존성과 마찬가지로 말입니다.

"잘못된 제안을 하거나 나쁜 권장 사항을 자동으로 실행할 수 있나요?" 여기서 어떤 도구도 recommendations 문자열을 실행하지 않습니다 -- 그것은 에이전트(또는 사용자)가 읽고 결정할 텍스트일 뿐입니다. dev_check만이 무언가를 실행하는 유일한 도구이며, 고정 허용 목록에 대해 스스로 인식한 명령만 실행합니다 -- 보안 모델 참조.

"어디로 전화를 걸거나 텔레메트리를 보내나요?" 아닙니다. 자체 네트워크 호출이 전혀 없습니다 -- 로컬 우선 아키텍처 참조.

"내 컴퓨터에서 어떤 명령도 실행하지 않는 MCP 서버를 원합니다." 10개 도구 중 9개는 순수 읽기 전용입니다(파일 읽기, 버전 확인). dev_check만 무언가를 실행하며, DevTwin이 프로젝트 파일에서 직접 인식한 명령만 허용 목록으로 검사하고 shell=False와 타임아웃으로 실행합니다 -- 정확히 무엇을 허용하고 허용하지 않는지는 보안 모델을 참조하세요.

이점

  • 잘못된 진단 감소. DevTwin이 없으면 실패를 디버깅하는 에이전트는 코드를 읽고 추측할 수밖에 없습니다 -- 실제로는 Node 버전 불일치나 중지된 데이터베이스인 문제에 대해 코드 수정을 제안하는 경우가 많습니다. DevTwin은 추측 대신 실제 사실을 제공합니다.

  • 여러 번 대신 한 번의 호출. 단일 dev_health 호출이 약 10개의 기본 검사(런타임 버전, 의존성 상태, 서비스, 포트, Git)를 하나의 구조화된 점수 결과로 묶습니다 -- 에이전트가 수십 번의 개별 셸 왕복을 하고 매번 원시 CLI 출력을 파싱하는 대신 말입니다.

  • 매번 동일한 검사. 생태계별 정확한 검사(Gradle wrapper vs. 시스템 Gradle, .nvmrc vs. package.json engines 등)가 한 번에 인코딩되므로 에이전트가 우연히 실행할 명령에 의존하는 대신 세션 간에 일관된 진단이 가능합니다.

  • 에이전트에 셸을 넘겨주는 것보다 안전. 임의 명령 실행이 없고 파괴적인 작업이 절대 없습니다 -- 보안 모델 참조.

  • 비밀 값은 절대 다루지 않음. 비밀로 보이는 환경 변수는 존재 여부만 확인하며 값은 절대 읽거나 반환하지 않습니다 -- 개인정보 보호 모델 참조.

  • 에이전트에 셸이 없는 곳에서도 작동. Bash 도구가 없는 MCP 클라이언트(일부 IDE 어시스턴트, 제한된 에이전트)도 이 기능을 전혀 못 쓰는 대신 사용할 수 있습니다.

토큰 비용

추정치가 아닌 실제 수치 -- 이 서버 자체의 MCP 도구 스키마(mcp.list_tools())와 실제 dev_health() 응답에서 직접 측정했으며, 표준 약 4문자-당-토큰 근사치를 사용했습니다.

토큰이 소비되는 두 가지 시점이 있으며 비용이 매우 다릅니다:

시점

발생 상황

비용

클라이언트가 DevTwin에 연결하는 순간

10개 도구 스키마(이름, 설명, 매개변수)가 해당 세션의 모든 요청에 추가됩니다 -- 도구가 호출되는지 여부와 무관합니다. 이는 DevTwin에만 해당되는 것이 아니라 모든 MCP 서버에 해당됩니다.

모든 턴마다 약 1,400토큰

도구가 실제로 호출되는 경우에만

해당 도구 하나의 JSON 응답이 컨텍스트에 한 번 추가됩니다.

호출당 약 120-200토큰 (발견된 문제 수에 따라 다름)

도구별 스키마 세부 내역(측정값):

도구

스키마 크기

≈ 토큰

dev_detect

440자

~110

dev_health

500자

~125

dev_drift

470자

~117

dev_explain_failure

793자

~198

dev_project_info

523자

~130

dev_dependencies

507자

~126

dev_services

507자

~126

dev_check

771자

~192

dev_prepare

645자

~161

dev_precommit

481자

~120

합계 (10개 도구 전체)

5,637자

≈1,400

솔직한 결론: 환경 질문을 전혀 다루지 않는 세션에서 단일 일회성 진단의 경우, 원시 Bash가 총 토큰에서 더 저렴할 수 있습니다 -- 약 1,400토큰의 고정 스키마 비용이 여러 셸 명령을 한 번의 호출로 대체하는 절약 효과를 능가하는 경우가 많습니다. 양쪽의 실제 수치에 대한 비교는 아래 작업 비교를 참조하세요.

DevTwin의 가치는 한 세션에서 환경 질문이 더 많이 나올수록 커집니다(고정 비용은 한 번만 지불하고 이후 질문마다 DevTwin은 약 150토큰인 반면 원시 Bash는 매번 수백 토큰 이상) -- 그리고 진정한 장점은 원시 토큰 수가 아니라 일관성, 안전성, 그리고 Bash 도구가 없는 MCP 클라이언트에서 작동한다는 점입니다. 이점 및 솔직한 트레이드오프 참조.

실질적 의미: DevTwin을 사용자 전체가 아닌 프로젝트별로 등록하여 고정 비용이 실제로 유용한 세션에서만 지불되도록 하세요 -- 다른 프로젝트에서 사용하기 참조.

솔직한 트레이드오프

DevTwin은 안정적인 환경을 위한 일상적인 도구가 아닙니다 -- 작성하는 모든 함수마다 "Postgres가 실행 중인지" 다시 확인할 필요는 없습니다. 비상용 도구입니다: 특정 순간(새 클론, 알 수 없는 빌드 실패, 커밋 직전)에 높은 가치를 제공하고 나머지 시간에는 유휴 상태입니다. 이것이 의도된 사용 패턴이지 단점이 아닙니다.

  • 토큰 오버헤드는 연결되는 순간부터 매 턴마다 사용 여부와 관계없이 발생합니다. 실제 측정 수치는 토큰 비용을 참고하세요.

  • 단발성 질문 하나에 대해서는 토큰 수에서 확실히 이기지 못합니다. 일관성, 안전성, 그리고 셸이 없는 클라이언트까지 도달할 수 있다는 점에서 이깁니다. 혜택 참고.

  • 에이전트가 이미 완전히 통제하는 저장소에 전체 셸 접근 권한을 갖고 있고 환경 드리프트가 거의 없다면, DevTwin이 필요 없을 수도 있습니다.

  • DevTwin이 가장 가치를 발휘하는 곳은: 공유/온보딩 저장소, 신뢰도가 낮거나 셸이 없는 에이전트 환경, 그리고 "무엇을 확인해야 할지" 자체가 어려운 멀티 에코시스템 모노레포입니다.

DevTwin 사용 시와 미사용 시: 실제 사례

에이전트에게 "npm test가 왜 실패하나요?"라고 묻는다고 가정해 보세요. 실제 원인은 Node 버전 불일치와 Postgres가 실행되고 있지 않기 때문입니다.

DevTwin 없이 (원시 Bash를 사용하는 에이전트) -- 올바른 명령 순서를 한 번에 하나씩 추측해야 합니다:

cat package.json                      # spot "engines": {"node": ">=20"}
node --version                        # v16.20.0 -- mismatch found
grep -i "pg\|postgres" package.json   # spot the Postgres dependency
cat .env                              # risk: may print a real secret into context
lsof -i :5432                         # nothing listening
docker ps                             # check if it's in a container instead

여섯 번의 왕복(round-trip), 에이전트가 스스로 만들어내야 했던 조사 경로, 4단계에서 비밀이 대화에 유출될 실제 가능성, 그리고 명령어 + 출력 텍스트 약 400-800 토큰 (파일 크기와 실행 중인 Docker 컨테이너 수에 따라 달라짐).

DevTwin과 함께라면, 한 번의 호출로:

dev_health()
{
  "status": "error",
  "summary": "2 issues found: runtime drift, service down",
  "issues": [
    "Node 16.20.0 installed, project requires >=20 (from package.json engines)",
    "Postgres required (found in docker-compose.yml) but not running on 5432"
  ],
  "recommendations": [
    "nvm install 20 && nvm use 20",
    "docker compose up -d postgres"
  ]
}

동일한 결론, 응답에 ~150 토큰 -- 게다가 해당 턴에 이미 지불된 ~1,400 토큰의 고정 스키마 비용까지 (토큰 비용 참고). 여섯 번 대신 한 번의 호출, 비밀 유출 가능성 없음, 그리고 세션마다 달라지는 임의 조사 대신 매번 동일하게 선별된 검사.

이 기능으로 가능해지는 질문 예시

  • "내 개발 환경을 점검해 줘."

  • "내 Kotlin 프로젝트가 빌드에 실패하는 이유는 무엇인가요?"

  • "이 저장소에 맞는 Node 버전인가요?"

  • "내 앱이 Postgres에 연결되지 않는 이유는 무엇인가요?"

  • "내 환경이 이 저장소가 기대하는 것과 다른가요?"

  • "커밋하기 전에 무엇을 실행해야 하나요?"

  • "방금 이 저장소를 클론했는데, 실행하려면 무엇을 해야 하나요?"

언어별 예시

지원되는 에코시스템마다 한 행씩: 실제로 물어볼 질문, 답을 위해 DevTwin이 확인하는 항목, 그리고 dev_check에 대해 인식하는 테스트/빌드 명령어.

에코시스템

예시 질문

확인되는 항목

인식되는 명령어

Python

"이 저장소에 맞는 Python 버전인가요?"

python/python3 vs .python-version 또는 pyproject.toml [project.requires-python]; uv/pip/poetry/pipenv + 잠금 파일

pytest, ruff check ., mypy .

Node.js

"npm test가 왜 실패하나요?"

node vs .nvmrc/.node-version/package.json engines; npm/pnpm/yarn/bun + 잠금 파일

npm test (또는 pnpm test/yarn test/bun test), <mgr> run lint

JVM (Java + Kotlin + Android)

"새로 클론한 후 Android 앱이 빌드되지 않는 이유는 무엇인가요?"

java/kotlinc 버전; Gradle wrapper 버전과 설치된 Gradle 버전 비교; Maven wrapper; 특히 Android 프로젝트의 경우: ANDROID_HOME/ANDROID_SDK_ROOT, 또는 local.properties의 sdk.dir 및 해당 경로가 실제로 존재하는지

./gradlew test, ./mvnw test

Go

"이 저장소에 맞는 Go 버전인가요?"

go vs go.mod에 필요한 버전

go test ./..., go build ./...

Rust

"cargo build가 왜 실패하나요?"

rustc vs rust-toolchain[.toml] 채널

cargo test

.NET

"dotnet build가 왜 실패하나요?"

dotnet SDK 존재 여부 및 버전

dotnet test

Swift (iOS/macOS)

"내 iOS 빌드가 왜 실패하나요?"

swift/xcodebuild vs Package.swift 도구 버전; CocoaPods/SPM 잠금 파일 상태

swift test (SPM 프로젝트만)

Ruby

"bundle exec rspec가 왜 실패하나요?"

ruby vs .ruby-version; Bundler + Gemfile.lock

bundle exec rspec, bundle exec rake test

PHP

"내 PHP 앱이 부팅에 실패하는 이유는 무엇인가요?"

php vs composer.json의 require.php; Composer + composer.lock

composer test, vendor/bin/phpunit

Generic (fallback)

"이 저장소가 위의 어떤 언어에도 해당하지 않는데, 무엇을 알 수 있나요?"

Makefile/Taskfile.yml/justfile/Dockerfile/compose 서비스

make test, task test, just test

아키텍처

하나의 MCP 서버에 여러 에코시스템 어댑터가 있는 구조입니다. 언어마다 별도의 서버가 아닙니다.

MCP server -> core (workspace/detector/health/drift/diagnostics) ->
adapters (python/node/jvm/go/rust/dotnet/swift/ruby/php/generic) ->
system inspection (os/process/ports/env/fs/docker) ->
service detection (postgres/redis/generic)

자세한 내용은 docs/architecture.md에 있습니다. 새 언어 어댑터를 추가하는 방법: docs/adapters.md.

지원되는 에코시스템

에코시스템

감지 기준

런타임 확인

패키지 매니저

Python

pyproject.toml, requirements.txt, uv.lock, poetry.lock, Pipfile, .python-version

python/python3

uv, pip, poetry, pipenv

Node.js

package.json, 잠금 파일, .nvmrc, .node-version

node

npm, pnpm, yarn, bun

JVM (Java + Kotlin)

pom.xml, build.gradle[.kts], .java/.kt 소스

java, kotlinc

Gradle (wrapper 인식), Maven (wrapper 인식)

Go

go.mod, go.sum, go.work

go

go modules

Rust

Cargo.toml, rust-toolchain[.toml]

rustc

cargo

.NET

*.csproj/*.fsproj/*.vbproj, *.sln, global.json

dotnet

NuGet

Swift (iOS/macOS)

Package.swift, *.xcodeproj, *.xcworkspace, Podfile

swift, xcodebuild

SPM, CocoaPods

Ruby

Gemfile, *.gemspec, .ruby-version

ruby

Bundler

PHP

composer.json

php

Composer

Generic (fallback)

Makefile, Taskfile.yml, justfile, Dockerfile, compose 파일

--

make/task/just/docker

특정 어댑터에 매칭되지 않는 프로젝트도 일반(generic) 어댑터에서 유용한 출력을 얻을 수 있습니다. DevTwin은 인식되지 않는 프로젝트에 대해 아무것도 반환하지 않는 법이 없습니다.

설치

uv pip install devtwin-mcp
# or
pip install devtwin-mcp

이 저장소를 클론한 뒤 로컬 개발을 진행하려면 docs/development.md를 참고하세요.

MCP 클라이언트 설정

정확한 설정 구문은 클라이언트마다 다릅니다. 클라이언트 문서를 확인하세요. 일반적으로 DevTwin은 stdio MCP 서버이며 다음과 같이 호출합니다:

{
  "mcpServers": {
    "devtwin": {
      "command": "devtwin"
    }
  }
}

클론에서 로컬 개발할 때(패키지를 설치하지 않고):

{
  "mcpServers": {
    "devtwin": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/devtwin-mcp", "devtwin"]
    }
  }
}

MCP Inspector로 도구가 인식되는지 확인하세요:

npx @modelcontextprotocol/inspector uv run devtwin

다른 프로젝트에서 사용하기 (다른 개발자용)

DevTwin은 단일 바이너리입니다. 같은 설치에 원하는 수의 프로젝트를 연결할 수 있으며 프로젝트별 재설치가 필요 없습니다. 두 가지 범위(scope)가 있습니다:

범위

로드 대상

사용 시기

프로젝트 (권장 기본값)

이 저장소에서만

기본 선택 -- 이유는 토큰 비용 참고

사용자

모든 프로젝트, 모든 세션

대부분의 저장소에서 DevTwin을 사용하게 될 때

프로젝트 범위 -- 프로젝트 루트에 .mcp.json을 넣으세요:

{
  "mcpServers": {
    "devtwin": {
      "command": "/absolute/path/to/devtwin-mcp/.venv/bin/devtwin"
    }
  }
}

또는 Claude Code CLI로:

claude mcp add devtwin /absolute/path/to/devtwin-mcp/.venv/bin/devtwin --scope project

사용자 범위:

claude mcp add devtwin /absolute/path/to/devtwin-mcp/.venv/bin/devtwin --scope user

추가한 후 클라이언트를 다시 시작하고(또는 MCP 서버를 다시 연결한 다음) 평소처럼 질문하면 됩니다. 이 기능으로 가능해지는 질문 예시 참고.

모노레포 팁: 여러 플랫폼이 섞인 저장소(예: Android + iOS + 백엔드)에서는 저장소 루트 대신 특정 하위 폴더를 대상으로 질문하세요. 예: "android/ 앱의 상태를 확인해 줘". 혼합 저장소 루트에서 dev_detect를 실행하면 발견한 모든 에코시스템을 보고하는데, 한 번은 유용하지만 특정 대상을 확인할 때는 너무 시끄럽습니다.

도구 참조

모든 도구는 {status, summary, data, issues, recommendations}를 반환합니다. status는 ok, warning, error, unknown 중 하나입니다.

도구

클래스

설명

dev_detect

읽기 전용

증거와 함께 제공되는 빠른 파일 기반 프로젝트/생태계 탐지.

dev_health

읽기 전용

런타임, 의존성, 서비스, Git 상태를 결합한 전체 0-100 건강 점수.

dev_drift

읽기 전용

필수 런타임/도구 버전과 실제 설치된 버전을 비교.

dev_explain_failure

읽기 전용

주어진 오류 메시지를 순위가 매겨진 증거 기반 근본 원인으로 진단.

dev_project_info

읽기 전용

상세 프로젝트 검사: 런타임, 빌드 도구, 명령어, OS, Git.

dev_dependencies

읽기 전용

생태계별 의존성/잠금 파일 상태.

dev_services

읽기 전용

필수 로컬 서비스(Postgres, Redis, compose 서비스) 및 실행 상태.

dev_check

안전 실행

인식된 테스트/린트 명령어(예: pytest, ./gradlew test)를 타임아웃과 함께 실행.

dev_prepare

계획 전용

새로 클론된 저장소에 대한 준비 계획을 생성하며, 절대 실행하지 않음.

dev_precommit

읽기 전용

커밋 준비 상태 요약: Git 상태, 건강 상태, 비밀 키로 보이는 스테이징 파일.

보안 모델

  • 임의 명령 실행 없음. execute_shell 도구는 존재하지 않습니다. dev_check는 DevTwin이 프로젝트 파일에서 직접 인식한 명령어만 실행하며, 허용 목록(allowlist)에 대해 검사되고 shell=False 및 타임아웃으로 실행됩니다.

  • 파괴적 작업 절대 없음. DevTwin은 git reset --hard, rm -rf, kill -9, docker compose down, 잠금 파일 삭제 또는 .env 변경을 절대 실행하지 않습니다.

  • dev_prepare는 계획만 수립합니다. 모든 제안 단계를 (read_only/safe/requires_approval/dangerous)로 분류하며 그 자체로는 아무것도 실행하지 않습니다.

전체 세부 사항: docs/security.md.

개인정보 보호 모델

  • 환경 변수는 이름이 비밀 키로 보일 때(PASSWORD, TOKEN, SECRET, API_KEY, PRIVATE_KEY, ACCESS_KEY, AUTH, CREDENTIAL, ...) 존재 여부만 확인하며 값은 절대 반환하지 않습니다.

  • .env 파일은 변수 이름만 스캔합니다.

  • dev_precommit은 비밀 키로 보이는 스테이징 파일 이름을 표시하며 내용을 읽거나 보고하지 않습니다.

로컬 우선 아키텍처

  • 서버 구성 요소, 계정, 자체 네트워크 호출이 없으며, 검사하는 로컬 명령어(git, docker, 언어 툴체인) 외에는 아무것도 없습니다.

  • 보고하는 모든 것은 실행 중인 머신에 이미 존재하는 파일과 프로세스에서 비롯됩니다.

개발

uv sync --all-extras
uv run pytest
uv run ruff check .
uv run mypy src
uv run devtwin

전체 워크플로는 docs/development.md를 참조하세요.

기여

CONTRIBUTING.md를 참조하세요. 새로운 언어 생태계를 추가하는 것이 가장 일반적인 기여 방식입니다 -- 템플릿은 docs/adapters.md를, 실제 병합된 예시는 src/devtwin/adapters/swift.py, ruby.py, 그리고 php.py를 참조하여 모델링하세요.

로드맵

  • 추가 생태계 어댑터: Elixir, Dart, Scala, C/C++ (CMake/Bazel/Buck), Nix (추가 방법은 docs/adapters.md 참조)

  • 추가 서비스 탐지기 (MySQL/MariaDB, MongoDB, Kafka, RabbitMQ)

  • CI 구성(예: GitHub Actions 런타임 매트릭스)에 대한 더 풍부한 드리프트 비교

  • 세션 내 도구 호출 간 비용이 많이 드는 검사의 선택적 로컬 캐싱

라이선스

Apache-2.0 -- LICENSE 참조.

Available Tools

10 tools
dev_checkA

Run recognized project checks (tests/lint) detected from project files, e.g. pytest, ./gradlew test, npm test, cargo test. Only commands DevTwin itself recognized are ever executed (never an arbitrary string), each with a timeout. Pass run to restrict to a subset of the recognized commands (call dev_project_info first to see what's available).

ParametersJSON Schema
NameRequiredDescriptionDefault
runNo
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that only DevTwin-recognized commands are ever executed (never arbitrary strings) and that each command has a timeout, which is valuable safety information. It doesn't mention side effects or output specifics, but the core behavioral constraints are transparent.

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 three sentences, front-loaded with the core purpose, then safety details, then usage guidance. Every sentence earns its place with specific, actionable information and no filler.

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?

The tool has an output schema, so return values are documented separately. The description covers safety, usage flow, and available options, but omits any mention of the workspace parameter and doesn't clarify behavior when no checks are recognized. Given the tool's complexity and the availability of an output schema, these are minor gaps.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains the 'run' parameter (restrict to a subset of recognized commands) and directs the agent to dev_project_info to see valid values. However, the 'workspace' parameter is completely unaddressed; an agent might not know it represents the working directory. The explanation for 'run' is helpful but not comprehensive for both 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 tool runs recognized project checks (tests/lint) with concrete examples (pytest, gradlew test, npm test, cargo test). It uses a specific verb 'Run' and a well-defined resource, distinguishing it from sibling tools like dev_detect or dev_health which have different purposes.

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 advises calling dev_project_info first to discover available commands and to use the 'run' parameter to restrict execution to a subset. This provides clear context and a specific prerequisite, though it doesn't explicitly contrast with alternatives or state when not to use this tool.

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

dev_dependenciesC

Dependency state per detected ecosystem: package manager, lockfile presence/consistency signals, dependency counts, and whether packages appear installed locally (e.g. node_modules/, .venv/).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description alone must disclose behavior. It describes output content but does not state whether the tool is read-only, scans the filesystem, requires network access, or has side effects. It also omits any performance or error implications. The behavior is not transparent.

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

Conciseness4/5

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

The description is a single, concise sentence with no filler. It front-loads the key concept and lists specifics efficiently. While it could be slightly more structured with an explicit verb, it is economical and easy to parse.

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?

The tool has one undocumented parameter and no annotations. Even though an output schema exists (which may clarify return values), the description omits critical context about the workspace parameter and how ecosystems are detected. It is incomplete for an agent to call correctly without further inference.

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?

The only parameter 'workspace' has zero schema description coverage (0%), and the description does not mention it at all. The agent has no idea what workspace does, how it affects the results, or what values are acceptable. The description fails to compensate for the undocumented schema.

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

Purpose4/5

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

The description clearly states the tool reports dependency state per ecosystem, listing specific data points (package manager, lockfile, counts, local install). It is specific about content, though it lacks an explicit action verb like 'get' or 'list'. It does not differentiate from siblings, but the purpose is 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?

There is no guidance on when to use this tool versus alternatives like dev_detect, dev_health, or dev_drift. No mention of context that would trigger this tool, no exclusions, and no mention of alternatives. The agent must infer when to call it.

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

dev_detectB

Detect what kind of project lives at workspace: languages, ecosystems, and the evidence (files) behind each detection. Fast, file-based only.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It adds two meaningful traits: 'file-based only' (implying read-only, local operation) and 'fast' (performance). However, it lacks depth—no mention of error handling, what happens if the workspace is invalid, or whether it caches results. It provides some transparency but not comprehensive context.

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

Conciseness5/5

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

The description is two sentences with no fluff. It leads with the core purpose, then appends the behavioral notes. Every word contributes; nothing is redundant or unnecessary. This is an exemplary concise structure.

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 simplicity (one optional parameter, output schema exists), the description covers the essentials: what it does, the parameter, and some behavior. However, it omits usage context—when to choose this over siblings—and lacks deeper behavioral details like edge cases or side effects. It is adequate for basic use but not fully complete without referencing alternatives.

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 explains 'workspace' as the location where the project lives, which clarifies the parameter's role. The default '.' is also consistent. While it doesn't detail accepted path formats, for a single optional parameter this is sufficient and adds meaning beyond the schema.

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

Purpose4/5

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

The description clearly states the verb 'detect' and the resource 'project at workspace', and specifies the outputs: languages, ecosystems, and evidence files. It distinguishes itself from a tautology and conveys a specific capability, though it does not explicitly contrast with sibling tools like dev_project_info.

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?

There is no explicit guidance on when to use this tool versus alternatives. The phrase 'Fast, file-based only' hints at scope and performance but does not state when a developer should pick this over siblings such as dev_health or dev_project_info, nor does it mention exclusion criteria or prerequisites.

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

dev_driftA

Compare expected project state (required runtime/tool versions from project files) against what's actually installed locally. Reports each mismatch as a structured drift item.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 uses non-mutating verbs ('compare', 'reports') which strongly imply a read-only operation, but it does not explicitly state that it does not modify anything or disclose any side effects, permissions, or limitations. The lack of explicit transparency is a moderate gap for a tool that could potentially access local installations.

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

Conciseness5/5

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

The description is two sentences with no unnecessary words. It front-loads the core comparison action and then specifies the output format. Every word contributes to understanding the tool's function and result.

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

Completeness4/5

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

For a tool with a single optional parameter, an output schema, and no annotations, the description provides sufficient context to call it correctly. The purpose and result are clear, and the workspace parameter is implied. It could mention edge cases (e.g., invalid workspace) or what happens when no drift is found, but the output schema likely covers the return structure, so the description is nearly 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?

The schema describes 'workspace' with a default but no description, and schema description coverage is 0%. The description's mention of 'project files' and 'installed locally' gives context that the workspace parameter specifies which directory to inspect, but it does not explicitly describe the parameter's purpose or acceptable values. It adds some meaning but does not fully compensate for the missing schema 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 verb (compare), resource (expected vs installed project state), and outcome (reports mismatch as structured drift items). It distinguishes itself from sibling tools by specifying the exact comparison of required runtime/tool versions against local installations, which is not ambiguous.

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 the intended use case (detecting version drift) but does not explicitly state when to prefer this tool over alternatives, nor does it mention any exclusions or conditions. With many siblings, explicit routing would be helpful, but the core purpose is clear enough that an agent can infer appropriate usage.

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

dev_explain_failureA

Diagnose a development failure. Give it the error/output text (and optionally the command that produced it); it cross-references project type, runtimes, services, ports, and dependencies to rank likely root causes with evidence -- never asserting certainty beyond the evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandNo
workspaceYes
error_messageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool 'cross-references project type, runtimes, services, ports, and dependencies' and that it 'ranks likely root causes with evidence'. It also clarifies a behavioral trait: 'never asserting certainty beyond the evidence'. This is transparent about the tool's inductive reasoning and its limitation. The description doesn't mention any destructive actions or side effects, but the name suggests (and the description confirms) it is purely diagnostic. Given the lack of annotations, this is a good level of transparency.

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

Conciseness5/5

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

The description is two sentences long, with the main purpose and inputs at the front. It packs a lot of information: the input, the cross-referencing behavior, the output (ranked root causes with evidence), and a critical limitation ('never asserting certainty beyond the evidence'). No fluff, every clause earns its place. The structure is clear: first sentence states the action, second expands on internals and output.

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 (diagnostic reasoning tool with multiple input parameters and an output schema), the description covers the core functionality well: it explains what the tool does, what it takes, and what it returns. The output schema exists (though not provided in the input schema here, but the signal says 'Has output schema: true'), so the description doesn't need to detail return values. The main missing piece is explicit mention of the 'workspace' parameter – it is implied by 'project type, runtimes, services' but not directly stated as an input. Other than that, the description is complete enough for an agent to invoke the tool correctly.

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

Parameters4/5

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

The schema description coverage is 0%, so the description must compensate for the parameters. The description mentions 'error/output text' and 'command that produced it' and 'workspace' implicitly. It doesn't explicitly name the workspace parameter, but it says 'cross-references project type, runtimes, services, ports, and dependencies' which implies the workspace is the project context. The description adds value by explaining what the parameters are used for (error_message as the primary input, command as optional context). It does not cover all parameter semantics in detail (e.g., format of workspace), but given the high-level nature, it provides enough meaning beyond the schema's bare property names.

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: diagnose a development failure. It specifies the inputs (error/output text, optionally the command) and the output (ranks likely root causes with evidence). The verb 'diagnose' and the resource 'development failure' are specific, and the description distinguishes it from siblings by focusing on failure analysis rather than detection, health, or project info.

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 tells the agent when to use this tool: when you have error/output text and optionally the command that produced it. It implies that the tool is for diagnosing failures, not for general health checks or detection. While it doesn't explicitly name alternatives, the context signals and sibling names (dev_check, dev_detect) suggest it's for failure analysis, and the description gives a clear condition for invocation. This is a strong usage guideline, essentially 'use this when you have error text and want root cause analysis'.

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

dev_healthA

Full environment health check: combines project detection, runtime versions, dependency state, required services, ports, and Git state into a 0-100 health_score with concrete issues and recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 responsibility for behavioral disclosure. It does convey that the tool is non-mutating (a 'check' that produces a score and issues), implying a read-only operation, but it stops short of explicitly stating side-effect-free behavior, performance implications, or what happens if the workspace doesn't exist. It also doesn't describe the structure of the 'issues and recommendations' it returns, though an output schema is present. The overall intent is clear, but some behavioral specifics are left to inference.

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, densely informative sentence that front-loads the core purpose ('Full environment health check') and immediately enumerates the covered areas. Every element earns its place—no filler, no repetition. It is compact while conveying both scope and outcome, making it highly efficient for an agent to parse.

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

Completeness3/5

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

The description provides a good high-level overview of functionality and output, and the presence of an output schema relieves it of fully explaining return values. However, it omits any guidance on the `workspace` parameter (its purpose and valid values), which is necessary for correct invocation. It also doesn't mention prerequisites (e.g., must be inside a project) or how to interpret the health score beyond 'issues and recommendations'. For a tool that combines many aspects, these gaps are moderate, leaving the description slightly incomplete.

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?

There is one parameter, `workspace` (default '.'), and the schema provides zero description coverage (0%). The tool description never mentions this parameter or explains its meaning (e.g., directory path, project root). Although the name is somewhat self-explanatory and there is a sensible default, the description fails to compensate for the missing schema documentation. The agent is left to infer what value to pass, which is a notable gap for a parameter that affects the scope of the health check.

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 a specific verb ('health check') applied to the environment, lists the concrete aspects it combines (project detection, runtime versions, dependency state, services, ports, Git state), and defines the single 0-100 health_score output. It unambiguously distinguishes itself from narrower sibling tools like dev_dependencies or dev_services by being a 'Full environment health check' that aggregates many dimensions.

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 a comprehensive, one-stop check by explicitly enumerating what it covers, which signals when to use it (when a holistic overview is needed). However, it does not explicitly exclude alternatives (e.g., 'use dev_dependencies for dependency-only checks') nor call out situations where a narrower tool is preferred. This is clear context without exclusions, so a 4 is appropriate.

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

dev_precommitA

Read-only commit-readiness summary: Git status (dirty/staged/conflicts), project health, and staged files that look like secrets. Never commits, stages, or modifies anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the full burden. It explicitly states 'Read-only' and 'Never commits, stages, or modifies anything.' This fully discloses the tool's side-effect-free nature, which is the critical behavioral trait. The description goes beyond a simple purpose statement by reassuring the agent of safety.

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, with the core purpose front-loaded. The first sentence states what it does, the second reinforces the read-only guarantee. No fluff or redundant details; every word adds value.

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?

The description covers the tool's purpose, scope, and behavioral safeguards. An output schema exists, so return values are presumed documented elsewhere. The only notable gap is the undocumented 'workspace' parameter, which prevents the description from being fully complete for a drop-in usage understanding.

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 has one parameter ('workspace') with 0% description coverage, and the tool description does not mention it at all. This leaves the agent to infer that 'workspace' refers to a path, but there is no explicit guidance, default behavior, or allowed values. The description fails to compensate for the missing schema 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 a specific verb+resource: 'Read-only commit-readiness summary' and details the specific checks (Git status, project health, secrets). It also explicitly states what it never does, which distinguishes it from mutation tools. The purpose is unambiguous and distinct from sibling dev_* tools.

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?

Usage context is implied by the name and description: it is for checking commit readiness, presumably before committing. However, the description does not explicitly state when to use this tool versus its siblings (e.g., dev_health, dev_check) or provide any exclusion criteria. It offers clear context but no explicit comparisons.

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

dev_prepareA

Produce a preparation plan for a (likely newly-cloned) repository: ordered steps to align runtimes, start required services, install dependencies, and run the project's build/test commands. This tool NEVER executes anything -- it only plans, and classifies each step's blast radius (read_only/safe/requires_approval/dangerous) for the caller.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations provided, the description carries full behavioral burden. It explicitly states 'This tool NEVER executes anything -- it only plans' — a critical guarantee that prevents an agent from expecting side effects. It also discloses the output behavior (classifying each step's blast radius). This is thorough and transparent for a planning tool with zero side effects.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and then the key behavioral caveat. Every clause adds value: scope, typical use case, and the critical non-execution guarantee. No filler, no redundancy. It is concise and well-structured for an agent to parse quickly.

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

Completeness4/5

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

Given its simplicity (one optional param, no execution), the description is almost complete. It covers what the plan includes (steps, blast radius classification) and what it never does. The output schema exists, so return details are covered implicitly. Minor omission: it doesn't specify the format or granularity of the plan, but that is not essential for invocation. Overall, an agent can confidently call 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?

The schema has a single optional 'workspace' parameter with 0% description coverage, so the description must compensate. It does not directly explain 'workspace', but the purpose 'for a repository' implies the workspace is the repository path. Since the parameter is simple, optional, and has a sensible default, the lack of explicit parameter explanation is a minor gap. This warrants a middle score.

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 states a specific verb ('Produce a preparation plan'), a specific resource ('repository'), and the scope ('align runtimes, start services, install deps, run build/test'). It also explicitly disclaims execution, which clearly distinguishes it from sibling tools like dev_check or dev_detect that likely run commands. The purpose is unambiguous and differentiated without needing to name siblings.

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 a (likely newly-cloned) repository' — and clarifies it is for planning, not execution. However, it does not explicitly state when to prefer this over sibling tools (e.g., dev_check for actual validation, dev_services for service management). The context is present but no alternatives or exclusions are given, so guidance is implied rather than explicit.

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

dev_project_infoA

Detailed project inspection: detected ecosystems, runtimes (installed vs required), build tools, test/build commands, environment variables in use, OS info, and Git state. Broader and slower than dev_detect.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

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?

No annotations are provided, so the description carries the full burden. It discloses the scope of inspection and a performance characteristic (slower), but does not explicitly state read-only behavior, required permissions, or potential side effects. The word 'inspection' implies non-mutating, yet it is not stated outright.

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

Conciseness5/5

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

Two sentences that are front-loaded with the purpose and a detailed list, followed by a comparative note. Every word earns its place, with no redundancy or filler.

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?

An output schema exists, so return-value details are already covered. The description specifies a rich set of inspected aspects and includes a performance caveat. It does not explain the workspace parameter's role, but that is captured under parameter semantics. Overall, the description gives sufficient context for an agent to decide to call the tool and understand its high-level behavior.

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 coverage is 0% and the description does not mention the 'workspace' parameter at all. The parameter name is self-explanatory, but the description adds no contextual meaning about what value to provide (e.g., project root path) or how it affects the inspection.

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?

States a specific verb 'inspection' with a specific resource ('project') and enumerates concrete content: ecosystems, runtimes, build tools, commands, environment variables, OS info, Git state. It also differentiates from dev_detect by noting 'broader and slower', making the purpose unmistakable.

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?

Explicitly contrasts with dev_detect ('Broader and slower than dev_detect'), giving a comparative usage cue. It implies choosing this tool when depth is needed over speed, though it does not list explicit when-not-to-use conditions or mention any other sibling tools.

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

dev_servicesA

Local service detection: which services (Postgres, Redis, and compose-defined services) this project appears to need, whether each is currently running/listening, and the evidence behind that conclusion.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that the tool performs local detection, checks whether services are running/listening, and provides evidence, which implies a read-only, non-destructive operation. However, it does not state that it has no side effects, does not start services, or what happens if services are missing. It is more transparent than a bare 'detect services' but still lacks explicit safety 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, dense sentence that front-loads the core purpose ('Local service detection') and packs in the three key outputs (needed services, running status, evidence). There is no filler or irrelevant information, making it highly 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?

The output schema exists (though not detailed here), so return values need not be explained. The description covers the essential scope: which services, whether running, and evidence. It omits explicit clarification of the 'workspace' parameter and any limitations, but for a detection tool with a single optional parameter, it is close to complete.

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 has one parameter 'workspace' with a default of '.' and zero description coverage (0%). The description does not mention the parameter at all, leaving the agent to infer that it refers to the project directory. The name and default give some hint, but the description adds no semantic value beyond the schema, and the schema itself provides no description.

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

Purpose5/5

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

The description states a specific verb ('detection') and resource ('services'): it identifies which services (Postgres, Redis, compose-defined) the project needs, whether they are running, and provides evidence. This clearly distinguishes it from sibling tools like dev_dependencies (dependencies) or dev_health (health status).

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 gives no explicit guidance on when to use this tool versus alternatives. It does not mention any conditions, alternatives, or exclusions. An agent would have to infer from the title and sibling names that this is about service detection, but there is no explicit routing or 'use this when' statement.

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 updatesv0.1.0
    • First observeddev_check
    • First observeddev_dependencies
    • First observeddev_detect
    • First observeddev_drift
    • First observeddev_explain_failure
    • First observeddev_health
    • First observeddev_precommit
    • First observeddev_prepare
    • First observeddev_project_info
    • First observeddev_services

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct aspect of the development environment: detection, health, drift, failure diagnosis, project info, dependencies, services, checks, preparation, and precommit. Even similar tools like dev_detect and dev_project_info are clearly differentiated by scope and speed. There is no ambiguous overlap that would cause an agent to select the wrong tool.

Naming Consistency5/5

All tool names follow the consistent pattern `dev_` + lower_snake_case, using descriptive verbs or nouns (detect, health, drift, explain_failure, etc.). The naming convention is uniform and predictable, with no mixing of camelCase or inconsistent verb styles.

Tool Count5/5

With 10 tools, the server is well-scoped and each tool serves a clear purpose within the domain of development environment analysis and preparation. The count is within the ideal range and avoids both bloat and insufficient coverage.

Completeness5/5

The tool set covers the full lifecycle for a diagnostics/preparation server: detection, health assessment, drift checking, failure explanation, dependency and service checks, test execution, preparation planning, and precommit readiness. No obvious gaps exist for the stated purpose, and the tools work together to provide comprehensive environment insight.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Zero-config MCP server that gives AI coding assistants a real-time diagnostic snapshot of your local dev environment. Detects framework, running services, recent errors, git state, and provides a health diagnosis in one call.
    3
    5 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to detect development environments, install missing tools, scan local code projects, and generate visual reports.
    4 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables LLM clients to inspect local development environment, including Docker container health, pnpm workspace integrity, and stuck process diagnosis.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLM clients to inspect local dev environments—Docker container health, pnpm workspace integrity, and stuck process detection—without manual terminal copy-pasting.
    MIT