Skip to main content
Glama
Jeon-byeong-yoon

code-smell-detection-mcp

code-smell-detection-mcp

IDE에서 Python 코드 스멜 정적 분석을 돌리기 위한 MCP stdio 서버. 공식 @modelcontextprotocol/sdk 기반이라 Claude Code / Cursor / Codex / Antigravity에 그대로 등록된다. (JSON-RPC 2.0, initialize / tools/list / tools/call)

IDE (MCP client)  ──stdio──▶  code-smell-detection-mcp  ──HTTP──▶  codevi-pyexamine
   엔드유저 PC                    엔드유저 PC (프록시)                서버 :3003

이 레포가 하는 일은 프로토콜 변환뿐이다:

  1. IDE가 analyze_python_smells(projectPath)를 호출한다

  2. 로컬 .py 소스를 모아 zip으로 묶는다

  3. analyzer service의 POST /analyze (multipart)로 올린다

  4. 응답을 MCP 도구 결과 형태로 정규화해 돌려준다

엔드유저는 analyzer의 존재를 모른다. Python도, 분석기도 설치하지 않는다. 스멜 탐지 규칙과 분석 로직은 전부 pyexamine이 소유한다.

사용법

npm install
npm run build
npm start          # 보통은 IDE가 대신 띄운다
npm run dev

테스트:

npm run test:stdio                    # MCP 핸드셰이크 + tools/list + tools/call
npm run test:advanced-pyexamine       # cli 모드 (mock 분석기)
npm run test:advanced-pyexamine:http  # http 모드 — zip 업로드 + 응답 정규화
npm run test:advanced-pyexamine:errors

Related MCP server: code-review-mcp-server

IDE 등록

필요한 건 analyzer service 주소뿐이다.

Claude Code

claude mcp add code-smell \
  --env ADVANCED_PYEXAMINE_MODE=http \
  --env ADVANCED_PYEXAMINE_SERVICE_URL=http://127.0.0.1:3003 \
  -- node /abs/path/code-smell-detection-mcp/dist/server.js

Cursor — .cursor/mcp.json (프로젝트) 또는 ~/.cursor/mcp.json (전역)

{
  "mcpServers": {
    "code-smell": {
      "command": "node",
      "args": ["/abs/path/code-smell-detection-mcp/dist/server.js"],
      "env": {
        "ADVANCED_PYEXAMINE_MODE": "http",
        "ADVANCED_PYEXAMINE_SERVICE_URL": "http://127.0.0.1:3003"
      }
    }
  }
}

Codex — ~/.codex/config.toml

[mcp_servers.code-smell]
command = "node"
args = ["/abs/path/code-smell-detection-mcp/dist/server.js"]

[mcp_servers.code-smell.env]
ADVANCED_PYEXAMINE_MODE = "http"
ADVANCED_PYEXAMINE_SERVICE_URL = "http://127.0.0.1:3003"

Antigravity

설정의 MCP Servers에서 stdio 서버 추가 — 위 Cursor와 동일한 command/args/env 스키마.

제공 도구 (1종)

analyze_python_smells

파라미터

필수

설명

projectPath

분석 대상 Python project path (엔드유저 로컬 경로)

only

comma-separated detector 이름 ("long_method,data_clumps")

summaryOnly

truesmellGroups 생략, summary만 반환

limitPerGroup

group당 최대 반환 항목 수

summary는 항상 전체 탐지 결과 기준이며, limitPerGroup은 반환되는 smellGroups만 제한한다. only / summaryOnly / limitPerGroup은 analyzer service가 지원하지 않으므로 이 서버가 적용한다.

ADVANCED_PYEXAMINE_TOOL_ENABLED=false면 도구를 노출하지 않는다.

환경 변수

env

설명

기본값

ADVANCED_PYEXAMINE_MODE

http (analyzer service) | cli (로컬 subprocess)

cli

ADVANCED_PYEXAMINE_SERVICE_URL

analyzer service 주소

— (http 모드 필수)

ADVANCED_PYEXAMINE_SERVICE_TIMEOUT_MS

업로드+분석 타임아웃

30000

ADVANCED_PYEXAMINE_SHARED_SECRET

설정 시 X-Internal-Token 헤더 전송

(미설정)

ADVANCED_PYEXAMINE_MAX_UPLOAD_FILES / _BYTES

업로드 상한

2000 / 20000000

ADVANCED_PYEXAMINE_TOOL_ENABLED

false면 도구 미노출

true

ADVANCED_PYEXAMINE_BIN / ARGS / CWD

cli 모드 실행 명령

python / -m,advanced_pyexamine / —

소스 업로드 동작

analyzer service는 엔드유저의 파일시스템을 볼 수 없으므로 경로가 아니라 내용을 보낸다. 수집 규칙:

  • .py만 수집. .git·__pycache__·venv·node_modules·dist 등은 건너뛴다

  • 심링크는 따라가지 않는다 (순환·의도치 않은 외부 반출 방지)

  • 상한을 넘으면 일부만 분석하지 않고 실패시킨다 — 조용히 잘라내면 사용자가 "스멜이 없다"로 오해한다

  • zip은 의존성 없이 직접 만든다 (src/zip.ts, zlib DEFLATE)

분석 대상 소스가 analyzer service로 전송된다. 사내 코드를 외부 서비스로 보내도 되는지 확인할 것. 코드를 반출하지 않으려면 cli 모드를 쓴다.

MCP 프로토콜 스모크 (수동)

npm run build
printf '%s\n' \
 '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"1"}}}' \
 '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
 '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
 | node dist/server.js

합격 기준: stdout에 JSON-RPC 외 텍스트 0줄, id:1 응답에 result.serverInfo, id:2 응답에 analyze_python_smells 1종(inputSchema 보유).

GUI 검증은 MCP Inspector:

npx @modelcontextprotocol/inspector node dist/server.js

보안

  • cli 인자 가드: cli 모드는 -로 시작하는 projectPath를 거부한다(플래그 주입 방지, shell: false라 셸 주입은 원천 불가).

  • 업로드 상한: 파일 수·총 바이트 상한을 넘으면 요청 자체를 거부한다.

  • 프롬프트 주입 주의: 도구 결과에 실리는 파일 경로·식별자 등은 분석 대상 코드에서 유래한다. 신뢰할 수 없는 코드를 분석하지 말고, IDE 에이전트의 자동 승인(YOLO) 모드 운용을 피할 것.

향후 작업

  • analyzer service 공개 주소 확정 — 현재 codevi-pyexamine:3003은 도커 내부 DNS와 localhost로만 닿는다. 엔드유저 기계에서 닿는 주소가 필요하다.

  • analyzer service 인증 — 현재 /analyze는 인증이 없다. 공개하면 사용자별 키와 레이트리밋이 필요하다.

  • npm 배포npx로 뜨게 해야 절대경로 없이 등록 config를 공유할 수 있다.

  • Python 외 언어 지원 (현재 분석기는 Python 전용).

Available Tools

13 tools
analyze_python_smellsC

Python 프로젝트를 advanced_pyexamine으로 분석해 smell 결과를 JSON으로 반환한다. cli 모드는 로컬 python + advanced_pyexamine 설치가 필요한 개발용 도구다.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlyNocomma-separated detector names (ex: "long_method,data_clumps")
projectPathYes분석 대상 Python project path
summaryOnlyNotrue이면 smellGroups 생략, summary만 반환
limitPerGroupNogroup당 최대 반환 항목 수

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 must carry the burden of disclosing behavior. It notes the cli mode requires local Python and advanced_pyexamine installation, but does not state whether the analysis is read-only, may modify files, or has other side effects. This is insufficient for an analysis 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?

Two sentences, no fluff. The main function is front-loaded, and the cli prerequisite is an important behavioral note. It's appropriately compact.

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

Completeness3/5

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

For a tool with 4 parameters and no output schema, the description gives a high-level overview and a prerequisite, but lacks details about result structure or workflow integration. It's adequate for basic use but not fully complete given the sibling complexity.

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 covers 100% of parameters with descriptions, and the description adds no parameter-specific semantics beyond the schema. Baseline of 3 applies.

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 it analyzes a Python project using advanced_pyexamine and returns smell results as JSON. The verb 'analyze' distinguishes it from sibling 'get' tools that retrieve existing results, though it doesn't explicitly name alternatives.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus siblings like get_latest_pyexamine_result or get_smells_by_file. The description implies it's for running a new analysis but lacks clear context and exclusions.

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

get_code_analysis_resultsA

CodeVi backend에 저장된 code-analysis 결과 목록을 최신순으로 조회한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo최대 반환 건수
jobNameNoJenkins job name 필터
commitHashNocommit hash 필터
teamProjectIdNoCodeVi team project ID 필터

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description states the ordering behavior ('최신순' = latest first) but does not explicitly disclose read-only nature, filtering behavior, or pagination. The term '조회' implies 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.

Conciseness5/5

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

A single sentence that is informative and free of redundant details.

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 is adequate for a simple list tool with fully documented parameters, but lacks explicit return-value information and alternatives, making it slightly under-specified for an agent without prior context.

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?

All four parameters have descriptions in the schema, so the description adds no additional parameter meaning beyond naming the resource and ordering.

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 uses the verb '조회한다' (retrieves) with a specific resource ('code-analysis 결과 목록' from CodeVi backend), clearly distinguishing it from sibling tools that deal with metrics or smells.

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?

No explicit guidance is given about when to use this tool over alternatives like list_metric_analyses or list_smell_analyses, but the focus on code-analysis results implies its use for listing such results.

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

get_high_severity_smellsA

high severity smell 목록을 조회한다. commitHash가 없으면 최신 결과를 사용한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo최대 반환 건수
jobNameNoJenkins job name 필터
commitHashNocommit hash 필터
teamProjectIdNoCodeVi team project ID 필터

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 one behavioral trait: if commitHash is absent, the latest result is used. This is valuable but does not cover other aspects such as read-only nature, authentication requirements, or output format.

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

Conciseness5/5

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

The description is extremely concise: two sentences that directly state the purpose and the key behavioral note. No wasted words, and the main action is front-loaded.

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 presence of multiple sibling tools (e.g., get_smells_by_file, get_pyexamine_result_by_commit), the description does not clarify when to use this tool versus those. The lack of an output schema and annotations further increases the burden, but the description only covers the basic retrieval behavior and one fallback rule.

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 already provides descriptions for all parameters (100% coverage). The description adds meaning by explaining the commitHash fallback behavior, which goes beyond the schema's simple 'commit hash 필터'. This enhancement justifies a score above the baseline of 3.

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

Purpose4/5

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

The description clearly states the tool retrieves a list of high severity smells, using the verb '조회한다' (retrieve) and the resource 'high severity smell 목록' (high severity smell list). The mention of commitHash fallback adds specificity. However, it does not explicitly differentiate from siblings like get_smells_by_file or get_code_analysis_results.

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 retrieving high severity smells, and the note about commitHash absence using the latest result gives some contextual guidance. However, there is no explicit mention of when to prefer this tool over alternatives, nor any exclusions.

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

get_latest_pyexamine_resultA

pyExamineResult가 있는 가장 최근 code-analysis 결과를 조회한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobNameNoJenkins job name 필터
commitHashNocommit hash 필터
teamProjectIdNoCodeVi team project ID 필터

TDQS

A3.5/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 it only states 'most recent' without explaining return format, behavior when no result exists, or whether filters combine additively. It also does not clarify what pyExamineResult is or any read-only property.

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, concise Korean sentence that directly communicates the tool's purpose with no unnecessary words. It is front-loaded and minimally sized.

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

Completeness3/5

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

For a simple read tool with no output schema and no annotations, the description is adequate but sparse. It does not explain return shape or how to differentiate from get_pyexamine_result_by_commit, leaving some gaps for the agent to infer behavior.

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?

All three parameters (jobName, commitHash, teamProjectId) are fully described in the schema, so the description adds no extra semantics beyond the existence of filters. Baseline 3 applies because schema coverage is 100% and the description does not add further usage detail.

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

Purpose5/5

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

The description clearly states the tool retrieves the most recent code-analysis result containing pyExamineResult, using a specific verb (조회한다) and resource. This distinguishes it from siblings like get_pyexamine_result_by_commit, which filters by commit, and from list-type 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?

The description implies when to use it (when needing the latest pyExamineResult), but provides no explicit guidance on when to prefer it over similar siblings like get_code_analysis_results or get_pyexamine_result_by_commit, nor any exclusion criteria.

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

get_metric_analysisA

저장된 metric analysis 단건을 조회한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYes조회할 metric analysis job ID

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 of disclosing behavior. It states the operation is a retrieval (조회), indicating a read action, but does not add context about error cases, return format, or permissions. It is minimally transparent but not misleading.

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, succinct sentence in Korean. It includes meaningful qualifiers (저장된, 단건) that clarify the scope without unnecessary words, making it concise and well-structured.

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

Completeness3/5

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

This is a simple get-by-ID tool with one parameter and no output schema. The description confirms it retrieves a single analysis, but it does not clarify whether the response contains the full analysis object or just a summary, which is relevant given sibling tools like list_metric_analyses. Minimal but adequate for a basic lookup.

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

Parameters3/5

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

Schema coverage is 100%: the jobId parameter is described as "조회할 metric analysis job ID" (metric analysis job ID to retrieve). The description adds no additional meaning about the parameter beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool retrieves a single saved metric analysis ("저장된 metric analysis 단건을 조회한다"), using a specific verb (retrieve) and resource (metric analysis) with a singular scope (단건). This distinguishes it from the sibling tool list_metric_analyses, which retrieves multiple analyses.

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 when to use the tool: when you need a specific metric analysis by job ID. It provides clear context for a single-record lookup but does not explicitly mention alternatives or when not to use it, so it falls short of a 5.

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

get_pyexamine_result_by_commitB

commit hash 기준으로 code-analysis(PyExamine) 결과를 조회한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
commitHashYes조회할 commit hash
teamProjectIdNoCodeVi team project ID

TDQS

B3.3/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full burden. It only says 'query results based on commit hash' and provides no detail on return format, error handling (e.g., missing commit), or whether teamProjectId is required in certain situations. The description does not disclose any behavioral traits beyond the basic 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.

Conciseness5/5

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

The description is a single, concise sentence that front-loads the key criterion (commit hash) and clearly states the action and resource. There is no redundant information or unnecessary detail.

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 tool is a simple lookup with 2 parameters, both documented in the schema. There is no output schema, so return value disclosure is not required. However, the description lacks any guidance on how this tool relates to siblings like get_latest_pyexamine_result or get_code_analysis_results, which is a meaningful gap for correct tool selection.

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

Parameters3/5

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

Schema description coverage is 100%, meaning both commitHash and teamProjectId have descriptions in the schema. The tool description adds nothing beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states 'commit hash 기준으로' (based on commit hash) and 'code-analysis(PyExamine) 결과를 조회한다' (query PyExamine results), indicating a specific retrieval action with a specific resource. This differentiates it from siblings like get_latest_pyexamine_result or get_code_analysis_results by explicitly scoping to commit hash.

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. It does not mention that it is intended for querying results by a specific commit, nor does it contrast with get_latest_pyexamine_result for latest results or get_code_analysis_results for general queries. This leaves the agent to infer the usage context.

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

get_smell_analysisB

저장된 smell analysis 단건 상세 정보를 조회한다. findings 배열 포함.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYes조회할 smell analysis job ID

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It implies a read-only operation via the verb 'retrieve', but it does not disclose behaviors such as not-found handling, permission requirements, rate limits, or absence of side effects. The 'findings array' note is a small behavioral hint, but it is insufficient for full 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 short sentences, front-loading the primary action and adding only the key output detail ('findings 배열 포함'). There is zero redundant wording, and every word earns its place. This is a model of conciseness.

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 single-parameter read tool with no output schema, the description is mostly complete. It states the resource and the key output field, and the schema covers the input. It lacks error-handling context or relationship to sibling tools, but given the simplicity, the essential information for invoking the tool correctly is present.

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 fully documents the only parameter jobId with a description ('조회할 smell analysis job ID') and a minimum constraint. The description adds no additional parameter semantics, such as how to obtain a job ID or any format details. With 100% schema coverage, the baseline of 3 is appropriate; the description does not need to compensate.

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

Purpose4/5

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

The description clearly states the action ('retrieves' via '조회한다') and the resource ('saved single smell analysis detail'). It also notes the 'findings array' inclusion, which distinguishes it from list-style siblings by emphasizing a single-item lookup. However, it does not explicitly differentiate from other sibling get tools like get_code_analysis_results, so it does not fully maximize sibling distinction.

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 does not mention that jobId would come from a list or save operation, nor does it recommend using list_smell_analyses to find job IDs. This leaves the agent without explicit selection criteria.

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

get_smells_by_fileA

파일 경로 기준으로 smell 목록을 조회한다. commitHash가 없으면 최신 결과를 사용한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo최대 반환 건수
jobNameNoJenkins job name 필터
filePathYessource file path (부분 일치)
commitHashNocommit hash 필터
teamProjectIdNoCodeVi team project ID 필터

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It adds the commitHash fallback behavior, which is useful, but does not mention return format, error scenarios, or performance considerations. The word '조회' implies read-only, but safety is not explicitly stated.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the main purpose and a key conditional. No fluff; every word earns its place.

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

Completeness3/5

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

For a 5-parameter tool with no annotations and no output schema, the description covers the core purpose and one behavioral nuance but leaves out details like partial matching of filePath and response structure. It is adequate but has clear gaps in 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?

Schema covers all 5 parameters, and the description adds meaning beyond the schema by explaining the default behavior of commitHash and highlighting filePath as the primary filter. This adds value for those two parameters, though others are left to the schema.

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

Purpose5/5

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

The description clearly states the tool retrieves a smell list based on file path, providing a specific verb, resource, and scope. It distinguishes from siblings like list_smell_findings or get_smell_analysis by emphasizing the file path criterion.

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: use when filtering by file path, and notes that without commitHash the latest result is used. This provides clear context, though it does not explicitly mention alternatives or exclusions relative to sibling tools.

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

list_metric_analysesB

CodeVi backend에 저장된 metric analysis 이력 목록을 조회한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
analysisTypeNo"full" | "classic" | "ck" | "oo" | "smells"
teamProjectIdNoCodeVi team project ID

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only states that the tool retrieves a list, with no mention of filtering behavior, return format, whether it is read-only, or any limitations. This is a minimal disclosure that leaves the agent without expectations for the operation's behavior.

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

Conciseness5/5

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

The description is a single, concise sentence that states the resource and action without unnecessary detail. It is front-loaded 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 no output schema and no annotations, so the description should explain what the response contains or how to use the filters. It only provides the basic purpose, omitting information about return structure, pagination, or how optional parameters affect results. This is incomplete for an agent to use effectively.

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

Parameters3/5

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

The description makes no mention of the parameters, but the input schema covers two of three parameters with descriptions and the status parameter has a self-explanatory enum. Schema description coverage is moderate (67%), so the description adds no extra meaning, but the schema provides adequate context for parameter usage.

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 action ('retrieves the list') and a clear resource ('metric analysis history stored in CodeVi backend'). This clearly distinguishes it from sibling tools like get_metric_analysis (singular) and list_smell_analyses (different analysis type).

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 as a list operation but does not explicitly state when to use this tool versus alternatives such as get_metric_analysis or run_metric_analysis. No exclusions or conditional guidance are provided, leaving the agent to infer from the tool name and context.

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

list_smell_analysesC

CodeVi backend에 저장된 smell analysis 목록을 조회한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
statusNo
analyzerNo"advanced_pyexamine" 등
languageNo"python" 등
commitHashNo
buildNumberNo
teamProjectIdYesCodeVi team project ID

TDQS

C2.1/5.0
Behavior1/5

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

With no annotations provided, the description must disclose behavioral traits, but it only states the basic listing operation. It does not mention pagination defaults, filtering behavior, ordering, or any side effects. The description adds no behavioral context beyond what the tool name already implies.

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?

The description is a single short sentence with no wasted words, but it is severely under-specified. It lacks essential information about the tool's behavior and parameters, making it incomplete rather than concisely effective.

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?

This tool has 8 parameters, no output schema, and no annotations, yet the description provides no context about return format, filtering, pagination, or typical usage. It is entirely inadequate for an agent to select and invoke the tool correctly, especially given the many sibling tools with overlapping purposes.

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?

Schema description coverage is low (38%), and the description does not explain any of the 8 parameters. It fails to mention that teamProjectId is required, or that limit, offset, status, analyzer, etc., are filters. The description adds no semantic value beyond the schema's minimal field descriptions.

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 a specific verb ('조회한다' = retrieve) and resource ('smell analysis 목록' = list of smell analyses), making its primary function clear. However, it does not distinguish itself from sibling tools like 'get_smell_analysis' (singular) or 'list_smell_findings', so it lacks explicit differentiation.

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 only says 'retrieves the list', with no mention of typical use cases, required context (e.g., teamProjectId), or when to prefer this over other list/detail tools.

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

list_smell_findingsA

특정 job의 finding 목록을 severity, name, filePath 등으로 필터링하여 조회한다. dashboard 상세 테이블 표시에 사용한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNosmell rule name (ex: "long_method")
jobIdYes조회 대상 smell analysis job ID
limitNo
offsetNo
categoryNoanalyzer category (ex: "size_metric")
filePathNosource file path prefix (ex: "src/")
severityNo

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description must carry the full burden of behavioral disclosure. It only mentions filtering criteria but doesn't explain pagination (limit/offset), ordering, empty results, or error behavior. The dashboard note is usage context, not actual tool behavior.

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

Conciseness5/5

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

The description is two short sentences with the core purpose front-loaded and no redundant text. It is appropriately concise and well-structured.

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 7-parameter tool with no annotations and no output schema, the description is too sparse. It doesn't describe the return value structure, pagination behavior, or constraints on jobId. The dashboard context doesn't satisfy the need for more complete tool documentation.

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

Parameters3/5

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

The description names severity, name, and filePath as filter dimensions, which adds meaning to those schema parameters. However, it doesn't mention the required jobId explicitly or address pagination parameters (limit, offset), and schema coverage is only 57%, so it only partially compensates for the 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 it retrieves a finding list for a specific job with filtering by severity, name, filePath, etc., and mentions the dashboard detail table use case. This distinguishes it from sibling tools like list_smell_analyses (which lists analyses) and get_smells_by_file (which is file-specific).

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?

It provides clear usage context by explicitly stating it's used for displaying a dashboard detail table. However, it doesn't mention when not to use it or name alternative tools like get_high_severity_smells or get_smells_by_file, so it stops short of explicit exclusion guidance.

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

run_metric_analysisB

CodeVi backend에 metric analysis 실행을 요청하고 결과를 저장한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
astDataNosourceType=ast_json일 때 AST JSON
filePathNo분석 대상 파일 경로
languageNosourceType=source_code일 때 언어
sourceCodeNosourceType=source_code일 때 소스 코드
sourceTypeYes입력 소스 형태
analysisTypeYes실행할 분석 종류
teamProjectIdNoCodeVi team project ID (생략 시 METRICS_DEFAULT_TEAM_PROJECT_ID 사용)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of disclosing behavioral traits. It mentions that results are stored, implying a side effect, but it does not explain permissions, execution duration, failure handling, or whether the operation is asynchronous. Minimal side-effect disclosure is present but insufficient for a run/execute 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 a single sentence, direct and free of redundant details. It communicates the core action and resource clearly. While it is terse for a tool with 7 parameters, the sentence earns its place by stating purpose concisely.

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 (7 parameters, nested objects, no output schema) and the absence of annotations, the description is not complete enough. It omits information about return values, side effects, and when to use this tool relative to other analysis tools. The description leaves significant gaps for an agent to safely invoke the tool.

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

Parameters3/5

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

All 7 parameters have schema descriptions (100% coverage), so the baseline is 3. The description itself adds no parameter semantics beyond what the schema provides, and it does not clarify interdependencies like how sourceType determines whether astData or sourceCode is relevant. The schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool's function: requesting the CodeVi backend to execute metric analysis and store the results. This distinguishes it from sibling get/list tools and other analysis tools. The verb 'run' is implicit in the tool name, and the resource is explicitly 'metric analysis'.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or how it relates to sibling tools like get_metric_analysis or analyze_python_smells. There is no 'use this when' context.

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

save_smell_analysisA

CodeVi backend에 smell analysis 실행을 요청하고 결과를 저장한다. backend가 advanced-pyexamine-service /analyze 를 호출해 findings 를 저장한다. projectPath는 서버측 analyzer 컨테이너 내부 경로여야 한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsNo
analyzerYes분석 도구 (ex: "advanced_pyexamine")
languageYes분석 언어 (ex: "python")
sourceRefNobranch, tag, PR ref 등
commitHashNo분석 대상 commit hash
buildNumberNoJenkins build number
projectPathNo분석 대상 project path (analyzer 컨테이너 내부 경로, ex: /opt/advanced-pyexamine-source/...)
teamProjectIdYesCodeVi team project ID
codeAnalysisIdNo연결할 CodeVi code analysis job ID
metricAnalysisJobIdNo연결할 metric-analysis job ID

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 does disclose meaningful behavior: the backend workflow via /analyze, persistence of findings, and the constraint that projectPath must be a container-side path. However, it omits side-effect details such as whether results are overwritten, idempotency, authentication, or response/return behavior.

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

Conciseness5/5

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

The description is three tightly written sentences: purpose, backend mechanism, and a key parameter warning. Every sentence contributes useful information with no filler.

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

Completeness3/5

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

For a 10-parameter tool with no output schema and no annotations, the description gives a useful high-level flow but leaves out what the tool returns after saving, how to link results to subsequent getters, and any prerequisites. It is adequate but has 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?

Schema coverage is 90%, so the schema already documents most parameters. The description only reinforces the projectPath container-path guidance, which duplicates the schema's own parameter description, adding no new semantic value beyond it.

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 action: request smell analysis execution from the CodeVi backend and save results. It also adds distinctive detail by mentioning the backend calls advanced-pyexamine-service /analyze and stores findings, which separates it from pure getter or metric-analysis tools.

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 given on when to use this tool versus siblings like analyze_python_smells or run_metric_analysis. The description only mentions a projectPath requirement, not decision criteria or exclusions.

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

TDQS

B3.1/5.0
Disambiguation3/5

Some tools have clear distinctions (e.g., list vs get, by commit vs by file), but there is notable overlap between get_code_analysis_results, get_latest_pyexamine_result, and get_pyexamine_result_by_commit, as well as between get_high_severity_smells and list_smell_findings. Descriptions help clarify, but an agent could easily confuse similar query tools.

Naming Consistency2/5

Naming is inconsistent: list_metric_analyses vs get_code_analysis_results use different prefixes for list operations, and run_metric_analysis vs save_smell_analysis vs analyze_python_smells have varied verb conventions. A consistent verb_noun pattern is not maintained throughout.

Tool Count5/5

13 tools is well-scoped for a code-smell detection server, covering analysis execution, result querying, and filtering without being overwhelming. Each tool serves a distinct analytical purpose, making the count appropriate.

Completeness4/5

The tool set covers analysis execution, result storage, retrieval, and filtering across metric, smell, and code analyses. Minor gaps exist, such as no direct 'run code-analysis' tool distinct from smell analysis, but core workflows are well supported.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables comprehensive code analysis including quality assessment, security vulnerability detection, refactoring suggestions, complexity calculations, and automatic documentation generation for multiple programming languages.
    5
    10
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides comprehensive code quality analysis with quantitative metrics, historical trends, and refactoring risk prediction for C#, Python, and TypeScript codebases.
    5
    20
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jeon-byeong-yoon/code-smell-detection-mcp'

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