Skip to main content
Glama

My Own MCP Based on a Meeting Minutes Generation Project

An educational local MCP package that reads unstructured meeting notes, builds meeting minutes writing prompts, validates drafts, and saves them after user approval.

The company names, person names, schedules, incidents, figures, and statements in this package are all synthetic data created for educational purposes.

Learning Objectives

After completing the lab, trainees will be able to:

  1. Explain the roles of MCP Host, Server, and Tool.

  2. Run a local STDIO MCP server with Python.

  3. Implement and modify a Tool that reads unstructured data.

  4. Design a write Tool with validation and approval boundaries.

  5. Customize the MCP to their own meeting minutes format.

  6. Connect the server to Codex or Claude Desktop and demonstrate its behavior.

  7. Design tool descriptions, schemas, responses, and errors from a harness engineering perspective.

Related MCP server: Guarded MCP Agent

What's Included

  • 3 synthetic unstructured meeting notes by difficulty level

  • A working FastMCP server: 11 tools, 3 resources, 1 prompt

  • A standard meeting minutes template

  • Approval-token-based saving and overwrite detection

  • A grounding checker that cross-references the source text

  • 5 trainee lab workbooks

  • 1 instructor answer example

  • Unit tests for domain, grounding, and harness conventions, plus an STDIO smoke test

Quick Start

Required environment: Python 3.11 or later, uv

uv sync --extra dev
uv run pytest -q
uv run python scripts/smoke_stdio.py

To use MCP Inspector, run the following:

uv run mcp dev src/meeting_mcp/server.py

Provided Tools

The recommended flow is in the order below, and the next_actions field in every response tells you the next step.

DISCOVER → READ → GROUND → DRAFT → CHECK → PREVIEW → [사용자 승인] → SAVED

Step

Tool

Read/Write

Role

DISCOVER

list_dummy_notes

Read

View 3 synthetic notes

READ

read_meeting_note

Read

View the source text. Supports line range specification and L14 citation anchors

GROUND

extract_note_facts

Read

Extract decision candidates, dates, and unconfirmed expressions with line numbers

DRAFT

build_minutes_prompt

Read

Combine the template with the source text

CHECK

validate_minutes_draft

Read

Structural validation. Provides rule_id·severity·line·fix (save gate)

CHECK

check_minutes_grounding

Read

Cross-check that people, dates, and figures exist in the source text (advisory, does not block saving)

PREVIEW

diff_minutes_against_saved

Read

Check the difference from the existing saved version

PREVIEW

preview_save_minutes

Read

Shows validation, grounding, and diff together and issues an approval token

SAVED

save_approved_minutes

Write

Saves only when the approval token matches (the only write tool)

OBSERVE

list_saved_minutes

Read

List of saved meeting minutes

OBSERVE

read_minutes_audit_log

Read

View the save audit log

Resources and Prompts

Type

URI or Name

Role

Resource

note://{note_id}

Meeting note source text

Resource

template://minutes

Standard meeting minutes template

Resource

minutes://{note_id}

Saved meeting minutes

Prompt

write_minutes

Meeting minutes writing workflow including the approval boundary

Harness Design

This server treats not only functionality but also the way the model uses tools as a design target. See Lab 5 for details.

  • Every response includes stage and next_actions, so the model can choose the next tool from the response alone.

  • Errors return a cause code, recovery method, and selectable values together.

  • Argument schemas are kept flat ({"note_id": "..."}). Using a Pydantic model as an argument type nests them as {"params": {...}} and changes the call shape.

  • Return values are Pydantic models, so outputSchema is generated automatically.

  • Only definitive checks (structure) block saving; heuristic checks (grounding) are reported as warnings only.

  • Every tool has readOnlyHint / destructiveHint to distinguish write tools.

Codex Connection

Run the following command from the package root:

codex mcp add personal-meeting -- uv --directory "$PWD" run python src/meeting_mcp/server.py
codex mcp list

In the Codex app, you can also add it as an STDIO server under Settings → MCP servers → Add server. Per OpenAI's official documentation, the Codex app, CLI, and IDE extension share MCP settings on the same host.

Claude Desktop Connection

Replace ABSOLUTE_PROJECT_PATH in config/claude_desktop_config.example.json with the absolute path to this folder, then apply it to the Claude Desktop settings. You must fully quit the app and relaunch it.

personal-meeting MCP에서 사용 가능한 더미 회의 메모를 보여주세요.
training_design 메모를 읽고, 제공된 회의록 템플릿에 맞춰 초안을 작성하세요.
원문에 없는 담당자와 기한은 추정하지 마세요.
incident_review 메모에서 extract_note_facts로 ambiguity_flags를 먼저 확인하고,
확정되지 않은 항목은 전부 '미정'으로 남긴 회의록을 작성하세요.
작성한 회의록을 validate_minutes_draft와 check_minutes_grounding으로 검증하고,
통과하면 preview_save_minutes까지만 실행하세요. 저장은 아직 하지 마세요.

Training Sequence

  1. START_HERE.md

  2. Lab 1: Data and Tools

  3. Lab 2: Meeting Minutes Prompt

  4. Lab 3: Validation and Approval

  5. Lab 4: Client Connection

  6. Lab 5: Harness Engineering

Verification Commands

uv run pytest -q
uv run python scripts/smoke_stdio.py
uv run python scripts/validate_package.py

Design Principles

  • MCP does not call a separate LLM API.

  • Codex or Claude handles summarization, and MCP handles data, validation, and storage.

  • Information not confirmed in the source text is not generated, and the grounding checker mechanically cross-references it.

  • Final saving requires both the approval token issued in the preview and explicit user approval.

  • The approval token is a hash of (note_id, body), so the approved content and the saved content cannot diverge.

  • Domain logic (core, grounding) is separated from tool conventions (server, harness).

  • Real training does not use customer, employee, or contract-related data.

References

Available Tools

11 tools
build_minutes_promptA
Read-onlyIdempotent

회의 메모와 표준 템플릿을 결합한 회의록 작성 프롬프트를 반환합니다.

이 MCP는 LLM API를 호출하지 않습니다. 요약은 호스트(Claude/Codex)가 하고, 이 도구는 '무엇을 어떤 형식으로 쓸지'에 대한 지시문만 조립합니다.

Args: note_id: 메모 id. with_line_numbers: 원문 줄 번호 부착 및 인용 규칙 추가 여부 (기본 True).

Returns: PromptResponse: prompt에 규칙 + 템플릿 + 원문이 담긴 지시문.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes메모 id
with_line_numbersNoTrue면 원문에 줄 번호를 붙이고, 근거 칸에 'L14' 형태로 인용하도록 규칙을 추가합니다.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stageYes회의록 워크플로에서 지금 위치한 단계
promptYes
statusYes이 호출의 결과 상태
note_idYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the key behavioral fact that this MCP does not invoke the LLM and only assembles instructions — a genuinely non-obvious trait for a tool named 'build_minutes_prompt' that an agent might otherwise assume performs the summarization itself. No contradiction with annotations.

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

Conciseness4/5

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

Well-structured: a purpose sentence up front, followed by a behavioral note, then clean Args and Returns sections. The behavioral note earns its place by preventing the agent from expecting an LLM call. The docstring-style formatting (Args/Returns headers) is slightly verbose but reads efficiently and front-loads the core purpose.

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 two-parameter, read-only, idempotent tool with an output schema and full parameter coverage, everything an agent needs is present: purpose, role in the pipeline, parameter defaults, and the return concept (rules + template + original text). No consequential gaps remain.

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%; note_id and with_line_numbers are already documented, with with_line_numbers explaining the 'L14' citation format and default true. The Args section of the description largely restates the schema (note id, default True), adding little beyond it. With full schema coverage, baseline 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 states a specific action — combining meeting notes with a standard template to return a meeting-minutes writing prompt — which clearly distinguishes it from siblings that read notes, extract facts, validate drafts, or save minutes. The title '회의록 작성 프롬프트 생성' reinforces this. Nothing ambiguous about what resource is acted on or what is produced.

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 explains the tool's role in the pipeline: it does not call the LLM API, the host (Claude/Codex) performs summarization, and this tool only assembles formatting instructions. This tells the agent this is the prompt-preparation step rather than a summarizer or validator. It lacks explicit 'use X instead' routing or when-not-to-use guidance, but the workflow context is clearly conveyed.

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

check_minutes_groundingA
Read-onlyIdempotent

회의록에 적힌 사람·날짜·수치가 원문에서 확인되는지 역으로 대조합니다.

"원문에 없는 결정·담당자·기한을 추정하지 않는다"는 규칙을 사람 눈 대신 기계가 확인합니다. 날짜는 '9월 15일', '8/27', '20일' 같은 원문 표현을 ISO로 정규화한 뒤 비교하므로, 정상적인 회의록이 오탐으로 잡히지 않습니다.

검사 항목: - person_unsupported: 담당자·결정자 이름이 원문에 없음 - date_unsupported / year_unsupported: 날짜·연도의 근거가 원문에 없음 - number_unsupported: 원문에 없는 수치가 새로 생김 - evidence_missing: 실행 항목·리스크의 근거 칸이 비어 있음(참고) - ambiguity_dropped: 원문의 애매한 부분이 회의록에서 전부 확정되어 버림

중요: 이 검사는 자문(advisory) 입니다. 휴리스틱이므로 오탐이 있을 수 있고, 저장을 막지 않습니다. 저장 게이트는 validate_minutes_draft(구조)와 사용자 승인입니다. 경고가 났다면 해당 줄의 원문을 read_meeting_note로 다시 확인하고, 근거가 없으면 '미정'으로 바꾸세요.

Args: note_id: 원본 메모 id. minutes_markdown: 회의록 초안 전문. max_findings: 최대 지적 건수 (기본 30).

Returns: GroundingResponse: status(GROUNDED / MOSTLY_GROUNDED / NEEDS_EVIDENCE_REVIEW), score(0-100), findings[].

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes원본 메모 id
max_findingsNo돌려줄 최대 지적 건수
minutes_markdownYes검사할 회의록 초안 전문(마크다운)

Output Schema

ParametersJSON Schema
NameRequiredDescription
scoreYes
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
checkedYes
note_idYes
summaryYes
advisoryNoTrue. 근거 검사는 저장을 막지 않습니다. 저장 게이트는 validate_minutes_draft와 사용자 승인입니다.
findingsYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the description doesn't need to restate safety. It adds genuine value beyond annotations by disclosing the heuristic nature — false positives are possible, the check is advisory, and it normalizes date expressions to ISO to avoid false positives. These traits are not derivable from the structured fields and help an agent calibrate trust in the results.

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?

Purpose is front-loaded in the first sentence, and the inspection-item list plus the advisory note are well-organized with headers. The structure is clear, but the Args section largely duplicates the schema and could be trimmed. Minor redundancy keeps this from a 5.

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

Completeness5/5

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

An output schema (GroundingResponse) covers the return shape, so the description need not detail it. Everything else an agent needs is present: what the tool inspects, that it is advisory with possible false positives, how it fits in the save pipeline, and how to remediate findings. Nothing material is missing for a correct call.

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

Parameters3/5

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

Schema description coverage is 100%, with all three params (note_id, minutes_markdown, max_findings) already documented in the schema. The description repeats the Args with nearly identical information, adding only marginal context such as the default of 30 for max_findings. Since the schema carries the heavy lifting, the baseline of 3 is appropriate — the description adds no substantial new parameter meaning.

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 names a specific verb and resource — cross-checking people, dates, and numbers in minutes against the original note — and enumerates the exact inspection items (person_unsupported, date_unsupported, etc.). It distinguishes itself from validate_minutes_draft by stating that one checks structure while this checks factual grounding, so an agent can select it correctly without opening the schema.

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 places the tool clearly in the workflow: it is advisory, does not block saving, and the save gate is validate_minutes_draft plus user approval. It also gives a recovery path — re-check the original with read_meeting_note and change unsupported claims to '미정'. It lacks an explicit 'use X instead' exclusion for every sibling, but the context is strong enough that when/when-not usage is clear.

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

diff_minutes_against_savedA
Read-onlyIdempotent

이미 저장된 회의록과 초안의 차이를 보여 줍니다.

같은 note_id로 두 번째 저장을 하면 기존 파일을 덮어씁니다. 무엇이 사라지는지 먼저 확인해 사고를 막는 용도입니다.

Args: note_id: 메모 id. minutes_markdown: 초안 전문. diff_preview_lines: unified diff 미리보기 줄 수 (기본 40).

Returns: DiffResponse: diff.write_mode가 CREATE / OVERWRITE / NO_CHANGE 중 하나.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes메모 id
minutes_markdownYes비교할 회의록 초안 전문
diff_preview_linesNo돌려줄 diff 미리보기 줄 수

Output Schema

ParametersJSON Schema
NameRequiredDescription
diffYes
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
targetYes
note_idYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark it as read-only, non-destructive, and idempotent. The description adds valuable behavioral context beyond those hints: it warns that a second save overwrites existing minutes and frames the tool as a way to prevent data loss. It also previews the return type (DiffResponse with write_mode values), which is useful. This enriches the annotation profile without contradicting it.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence purpose, a brief explanation of why it exists, and a clear Args/Returns breakdown. Every sentence earns its place, and the most important detail (the overwrite warning) is front-loaded. No fluff or redundancy.

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

Completeness5/5

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

For a read-only diff tool, the description fully covers what it does, why it is used, and what it returns (DiffResponse with write_mode). An output schema exists, so return details are already specified. Nothing an agent needs to call it correctly is missing.

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%, so each parameter already has a description. The description's Args section essentially repeats the schema information, adding only minimal context (e.g., diff_preview_lines defaults to 40, minutes_markdown is the full draft). Since the schema already carries the meaning, the description does not add significant new value, warranting a baseline 3.

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

Purpose5/5

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

The description states a specific action: shows the difference between saved minutes and the draft. It clearly identifies the resource (meeting minutes) and the operation (diff comparison). The added context about preventing overwrite accidents further clarifies its purpose and distinguishes it from siblings like preview_save_minutes.

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 explicitly explains when this tool is useful: before a second save with the same note_id overwrites the existing file. It positions the tool as a safety check, giving clear contextual usage. However, it does not mention alternative tools or explicitly state when not to use it, so it stops short of a perfect 5.

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

extract_note_factsA
Read-onlyIdempotent

초안을 쓰기 전에 원문에서 '인용 가능한 사실'을 줄 번호와 함께 뽑습니다.

할루시네이션을 막는 가장 효과적인 방법은 사후 검사가 아니라 사전 앵커링 입니다. 이 도구는 참석자, 발화 줄, 날짜 표현, 결정 후보, 실행 항목 후보, 그리고 특히 ambiguity_flags(확정되지 않은 표현이 있는 줄)를 돌려줍니다. ambiguity_flags에 걸린 내용은 회의록에서 '미정'으로 남겨야 합니다.

Args: note_id: 메모 id. max_items_per_category: 분류별 최대 항목 수 (기본 15).

Returns: NoteFactsResponse: 각 항목이 line(원문 줄 번호)과 text를 가집니다. truncated_categories에 잘린 분류 이름이 들어갑니다.

Examples: - 사용: 초안 작성 직전, 근거 칸에 적을 앵커를 확보할 때 - 사용: 근거 검사에서 '담당자를 원문에서 찾지 못했습니다' 경고가 났을 때 - 사용하지 않음: 이미 완성된 초안을 검증할 때 → check_minutes_grounding

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes메모 id
max_items_per_categoryNo분류별 최대 항목 수. 컨텍스트 보호용입니다.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
note_idYes
date_linesYes
total_linesYes
next_actionsNo이어서 호출하면 좋은 도구 목록
participantsYes참석자 줄에서 뽑은 이름(참고용)
speaker_linesYes
ambiguity_flagsYes확정되지 않은 표현이 있는 줄. 이 줄들은 '미정'으로 남겨야 합니다.
people_mentionedYes원문에 등장하는 이름 후보. 여기 없는 이름도 원문 본문에 있으면 정당한 담당자일 수 있습니다.
action_candidatesYes
decision_candidatesYes
truncated_categoriesYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already convey read-only, idempotent, and non-destructive hints. The description goes beyond these by revealing that content in ambiguity_flags should remain 'undecided' in the minutes, and by noting that truncated_categories indicates categories that were cut due to limits. This provides actionable behavioral context that helps the agent use the output correctly.

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 structured with a clear opening purpose, a rationale, a list of returns, then Args/Returns/Examples sections. It is informative but not overly verbose, though some repetition (e.g., restating default value) could be trimmed. Front-loading the purpose and usage examples makes it easy to scan.

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

Completeness5/5

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

Given the tool's complexity with multiple output categories and an existing output schema, the description provides sufficient context: what it returns, how to interpret ambiguity_flags, and when to use it. The examples cover both positive and negative usage cases, making it complete for an agent to call the tool correctly in a workflow.

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?

Both parameters are fully described in the schema (100% coverage), so the description adds no substantive new semantic information. It restates the default value of max_items_per_category and its purpose ('context protection') but this closely mirrors the schema. Baseline 3 is appropriate because 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 extracts 'quotable facts' with line numbers from the original text before drafting, listing specific categories (attendees, speech lines, date expressions, decision candidates, action item candidates, ambiguity flags). It distinguishes itself from sibling check_minutes_grounding by explicitly stating it is not for verifying completed drafts, making its purpose and differentiation unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit usage scenarios: 'use right before draft writing' and 'when evidence check gives a warning', and a clear non-use case: 'do not use when verifying a completed draft, use check_minutes_grounding instead'. This gives an agent precise conditions for when to invoke this tool versus alternatives.

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

list_dummy_notesA
Read-onlyIdempotent

교육 패키지에 포함된 합성 비정형 회의 메모 목록을 조회합니다.

회의록 작업의 출발점입니다. 여기서 얻은 note_id를 다른 모든 도구에 넘깁니다.

Returns: NoteListResponse: notes[]에 note_id, 제목, 난이도(초급/중급/고급), 줄 수, 글자 수가 담깁니다.

Examples: - 사용: "어떤 더미 메모가 있나요?" - 사용하지 않음: 이미 note_id를 알고 있고 원문이 필요할 때 → read_meeting_note

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
notesYes
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is disclosed. The description adds valuable context that the returned note_id is meant to be passed to other tools and that the list contains notes with difficulty levels, line counts, etc. This goes beyond the annotations without contradicting them.

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 well-structured: a one-sentence purpose, a usage note about the workflow, a Returns section, and clear examples. Every sentence adds value, and the content is front-loaded with the main purpose.

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

Completeness5/5

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

For a no-parameter list tool with a rich output schema and safety annotations, the description provides purpose, usage guidance, return format hints, and examples. It covers everything an agent needs to know to invoke it correctly and understand its role in the workflow.

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

Parameters4/5

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

There are zero parameters, so schema coverage is complete and the description need not explain parameter semantics. The baseline of 4 applies. The description does mention the return structure, which is helpful but not about 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 it lists synthetic meeting notes from an education package, and distinguishes itself from read_meeting_note by noting that you should use that tool when you already have a note_id and need the original text. The verb 'list' and resource are explicit.

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

Usage Guidelines5/5

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

It explicitly says this is the starting point for meeting minutes work and provides a concrete example of when NOT to use it (when you already have note_id and need the original text), naming the alternative tool read_meeting_note. This gives agents clear selection criteria.

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

list_saved_minutesA
Read-onlyIdempotent

이미 저장된 회의록 목록을 조회합니다.

같은 note_id로 저장하면 덮어쓰기가 되므로, 저장 전에 무엇이 있는지 확인하는 용도입니다.

Returns: SavedListResponse: saved[]에 note_id, 경로, 줄 수, 수정 시각(UTC), 내용 해시 앞 16자.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
savedYes
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, covering safety. The description adds the return fields (note_id, path, line count, UTC timestamp, hash) and the overwrite-check use case, which is meaningful beyond the structured metadata. No contradictions.

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 plus a Returns block, with the primary purpose front-loaded. Every sentence earns its place; the overwrite warning and return format are concise and valuable.

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

Completeness5/5

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

For a parameterless read-only tool with annotations covering safety and an output schema (and the description enumerating the return fields), the definition is fully sufficient for correct invocation. No missing information.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description adds no parameter info because none exists, and the empty schema is fully covered. Nothing else is needed.

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 lists already-saved meeting minutes, using a specific verb (조회/retrieve) and resource (saved minutes). It also adds the overwrite warning context, which distinguishes it from similar list tools like list_dummy_notes.

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 explicitly frames the purpose as checking what exists before saving, providing clear context for when to use it. It does not name alternatives or exclusions, but the use case is unambiguous given the tool's specificity.

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

preview_save_minutesA
Read-onlyIdempotent

저장 대상·변경 내용·검증·근거 결과를 한 번에 보여 주고 승인 토큰을 발급합니다.

저장 직전의 단일 관문입니다. 구조 검증을 통과했을 때만 approval_token이 발급되며, 토큰은 (note_id, 본문) 해시라서 승인받은 내용과 저장되는 내용이 달라질 수 없습니다.

토큰은 사용자 승인을 대신하지 않습니다. 응답의 approval_request를 사용자에게 그대로 보여 주고, 사용자가 명시적으로 승인한 뒤에만 save_approved_minutes를 호출하세요.

Args: note_id: 메모 id. minutes_markdown: 저장할 회의록 전문. include_preview: 전문을 응답에 다시 담을지 여부 (기본 False). max_preview_chars: preview 최대 길이 (기본 4000).

Returns: PreviewResponse: status(AWAITING_APPROVAL / NEEDS_REVISION), approval_token, validation, grounding, diff, approval_request.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes메모 id
include_previewNoTrue면 회의록 전문을 응답에 그대로 되돌려줍니다. 이미 초안을 들고 있다면 False로 두어 컨텍스트를 아끼세요.
minutes_markdownYes저장할 회의록 전문(마크다운)
max_preview_charsNopreview 최대 길이

Output Schema

ParametersJSON Schema
NameRequiredDescription
diffYes
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
targetYes
note_idYes
previewNo
groundingYes
validationYes
write_modeYes
next_actionsNo이어서 호출하면 좋은 도구 목록
approval_tokenYes검증을 통과했을 때만 발급됩니다. 이 토큰은 사용자 승인을 대신하지 않습니다.
approval_requestYes사용자에게 그대로 보여 주고 승인을 받을 문장

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds rich behavioral context beyond that: the approval_token is a hash of (note_id, body) guaranteeing content integrity, the token does NOT replace user approval, and the token is only issued when validation passes. This precisely discloses the safety-critical behavior of the tool without contradicting any annotation.

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

Conciseness4/5

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

The description is front-loaded with the core purpose, followed by a critical safety warning, then clean Args and Returns sections. It is longer than average, but every section earns its place — especially the bolded warning that the token doesn't replace user approval, which is essential for correct usage. Slightly verbose but well-organized.

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

Completeness5/5

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

The description fully covers what an agent needs: purpose, usage sequence, safety guarantee regarding content integrity, the requirement for explicit user approval, and the routing to save_approved_minutes. The output schema (PreviewResponse) handles return-value details, so the description's Returns section listing status, approval_token, validation, grounding, diff, and approval_request is sufficient. Nothing essential is missing.

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% and the schema's own descriptions are unusually thorough — include_preview even explains the context-saving tradeoff. The description's Args section largely restates the schema rather than adding new meaning. Baseline 3 is appropriate because the schema already documents all four parameters well and the description adds only marginal context.

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 purpose: 'shows save target, changes, validation, grounding results at once and issues an approval token' — a single gateway before saving. It clearly distinguishes itself from the sibling save_approved_minutes by being the pre-save preview step. The verb+resource combination makes the tool's role unmistakable and differentiates it from the other validation/preview siblings.

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

Usage Guidelines5/5

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

The description explicitly positions itself as the 'single gateway right before saving' and provides a precise usage sequence: show approval_request to the user, wait for explicit approval, then call save_approved_minutes. It also states the condition for token issuance (structural validation must pass). This is ideal routing guidance that names the next tool to use and the precondition for use.

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

read_meeting_noteA
Read-onlyIdempotent

note_id에 해당하는 합성 회의 메모 원문을 읽습니다.

긴 메모를 통째로 읽어 컨텍스트를 낭비하지 않도록 줄 범위를 지정할 수 있고, 근거 검사에서 경고가 난 줄만 다시 확인할 때도 이 범위 인자를 씁니다.

Args: note_id: 메모 id. start_line: 시작 줄(1부터). 기본 1. end_line: 끝 줄. 생략하면 끝까지. with_line_numbers: 줄 번호 접두사 부착 여부. 기본 True.

Returns: NoteContentResponse: content에 본문, total_lines에 전체 줄 수, truncated에 일부만 읽었는지 여부.

Raises: ToolFailure: NOTE_NOT_FOUND / INVALID_NOTE_ID. 오류 메시지에 사용 가능한 note_id 목록이 함께 담깁니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYeslist_dummy_notes가 돌려준 메모 id (예: 'launch_sync')
end_lineNo읽기를 끝낼 줄 번호. 생략하면 끝까지 읽습니다.
start_lineNo읽기 시작할 줄 번호(1부터)
with_line_numbersNoTrue면 'L14 | 내용' 형태로 줄 번호를 붙입니다. 회의록 근거 칸에 인용 앵커를 적을 때 사용합니다.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
contentYes
note_idYes
end_lineYes
truncatedYes
start_lineYes
total_linesYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds significant behavioral context beyond those: it specifies the return structure (NoteContentResponse with content, total_lines, truncated), error behavior (ToolFailure with NOTE_NOT_FOUND / INVALID_NOTE_ID, and includes a list of valid note_ids), and the purpose of with_line_numbers for citation anchors. The synthetic nature of the data is also disclosed. This goes well beyond annotations and helps the agent predict side effects and outcomes accurately.

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

Conciseness4/5

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

The description is well-structured: a purpose sentence, a contextual paragraph, then labeled Args, Returns, and Raises sections. It is not bloated, but it duplicates parameter details that already exist in the schema, which adds minor redundancy. However, the structure is logical and front-loaded enough that an agent can quickly grasp the core purpose before diving into details. The redundancy does not significantly harm readability.

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

Completeness5/5

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

For a tool with four parameters and an output schema, the description covers everything an agent needs: what it does, when to use the range feature, parameter semantics, return structure, and error handling. It also discloses the synthetic nature of the data and why line numbers matter (for citations). Since the output schema exists and is likely detailed, the description's summary of return fields is sufficient. Nothing essential is missing.

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 every parameter already has a clear description in the input schema. The description's Args block largely repeats that information (note_id, start_line, end_line, with_line_numbers) with only minor additions, such as explaining with_line_numbers is for citation anchors—which is already present in the schema description. The description adds little beyond what the schema provides, so it meets but does not exceed the baseline of 3 for tools with high schema coverage.

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

Purpose5/5

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

The description opens with a clear statement: 'note_id에 해당하는 합성 회의 메모 원문을 읽습니다' (reads the original text of the synthetic meeting memo for the given note_id). It names the verb (read), the resource (synthetic meeting memo), and even characterizes the memo as synthetic, which distinguishes it from real data. The mention of line-range reading further clarifies a specific capability that separates it from straightforward read tools. No ambiguity remains about what this tool does.

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

Usage Guidelines4/5

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

The description provides a concrete usage scenario: '근거 검사에서 경고가 난 줄만 다시 확인할 때도 이 범위 인자를 씁니다' (use the range argument when re-checking only lines that raised warnings in grounding checks). This tells an agent when the range parameters are relevant. It does not explicitly name alternatives or exclusions, but the purpose is clear enough that an agent can infer when to select this tool over siblings like list_dummy_notes or extract_note_facts. The schema for note_id also hints at list_dummy_notes as the source of IDs, so usage context is adequately covered even if not stated in the description itself.

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

read_minutes_audit_logA
Read-onlyIdempotent

회의록 저장 감사 로그를 최신순으로 조회합니다.

AWAITING_APPROVAL → SAVED 흐름의 실행 증거를 제출할 때 사용합니다. 각 이벤트에는 시각, note_id, write_mode, 변경 줄 수, 내용 해시가 담깁니다.

Args: limit: 최대 건수 (기본 20). note_id: 특정 메모로 필터링 (선택).

Returns: AuditResponse: events[] 최신순.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo최신순 최대 건수
note_idNo특정 메모로 필터링. 생략하면 전체.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
stageYes회의록 워크플로에서 지금 위치한 단계
eventsYes
statusYes이 호출의 결과 상태
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds value by specifying the event fields (시각, note_id, write_mode, 변경 줄 수, 내용 해시) and that results are ordered 최신순. This is consistent with annotations; no contradiction.

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 compact, with a purpose statement first, then a use-case line, then structured Args and Returns sections. No wasted words. It loses one point because it could be even more terse (e.g., merging the first two sentences) and the Args/Returns formatting is a bit verbose but acceptable.

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

Completeness5/5

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

The tool is a simple read operation with an output schema provided. The description covers the purpose, use case, parameter semantics, and return type (AuditResponse with events[]). Given the readOnlyHint and output schema, nothing else is needed for an agent to invoke it correctly. Complete for its 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?

Schema coverage is 100%, and both parameters already have clear descriptions in the schema (limit: '최신순 최대 건수', note_id: '특정 메모로 필터링. 생략하면 전체.'). The description essentially repeats these, adding no new semantic meaning beyond what the schema provides. Baseline 3 is correct.

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 a clear verb (조회합니다) and a specific resource (회의록 저장 감사 로그) with ordering (최신순). It also names the exact use case (AWAITING_APPROVAL → SAVED 흐름의 실행 증거 제출), which distinguishes this from any sibling tool that might list minutes but not audit logs.

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 explicitly states when to use this tool: 'AWAITING_APPROVAL → SAVED 흐름의 실행 증거를 제출할 때 사용합니다.' This gives clear context. It does not explicitly mention when not to use it or name alternatives, but the use case is narrow enough to prevent misuse. A 4 is appropriate because it lacks exclusion guidance but provides solid context.

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

save_approved_minutesA
DestructiveIdempotent

미리보기에서 발급된 승인 토큰이 일치할 때만 회의록을 파일로 저장합니다.

이 서버에서 유일한 쓰기 도구입니다. 호출 전 반드시 두 조건을 만족해야 합니다.

  1. preview_save_minutes가 AWAITING_APPROVAL을 돌려주고 토큰을 발급했다.

  2. 사용자가 그 내용을 보고 명시적으로 저장을 승인했다.

토큰은 기술적 무결성(승인한 내용 == 저장되는 내용)만 보장합니다. 사용자 승인을 대신하지 않습니다. 사용자가 "저장해"라고 말하지 않았다면 호출하지 마세요.

Args: note_id: 메모 id. minutes_markdown: 저장할 회의록 전문. approval_token: 미리보기가 발급한 토큰. expected_write_mode: 선택. 지정하면 실제 write_mode와 다를 때 거부합니다.

Returns: SaveResponse: path(저장 경로), audit(감사 로그 경로), write_mode(CREATE / OVERWRITE / NO_CHANGE).

Raises: ToolFailure: TOKEN_MISMATCH, VALIDATION_FAILED, WRITE_MODE_CHANGED, INVALID_NOTE_ID. 모두 복구 방법이 메시지에 포함됩니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes메모 id
approval_tokenYespreview_save_minutes가 발급한 승인 토큰
minutes_markdownYes저장할 회의록 전문. preview_save_minutes에 넘긴 것과 한 글자라도 다르면 토큰 검증에 실패합니다.
expected_write_modeNo미리보기에서 본 write_mode. 지정하면 실제 상태와 다를 때 저장을 거부합니다. 덮어쓰기 사고 방지용입니다.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
auditYes
stageYes회의록 워크플로에서 지금 위치한 단계
statusYes이 호출의 결과 상태
note_idYes
write_modeYes
next_actionsNo이어서 호출하면 좋은 도구 목록

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true) by explaining that the token only guarantees technical integrity, not user approval; that the tool is destructive (overwrite possible) and idempotent; and that errors include recovery guidance in the exception messages. All behavioral traits are disclosed without contradiction.

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 well-structured with headings for Args, Returns, and Raises, uses bullet points for preconditions, and front-loads the core requirement. While moderately long, every sentence contributes necessary information (preconditions, token semantics, error handling) and there is no fluff or redundancy.

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

Completeness5/5

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

Covers the complete lifecycle: prerequisites, parameter semantics, return value (SaveResponse), error conditions and their recovery, and how it fits among siblings (only write tool). The presence of an output schema further reduces the burden. Nothing an agent needs to call this tool correctly is missing.

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

Parameters4/5

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

The input schema already provides 100% coverage and detailed descriptions for all four parameters, including token mismatch and expected_write_mode enforcement. The description's Args section largely repeats this but adds important context about the token's limited guarantee and the preconditions, adding marginal value beyond the schema. A baseline of 3 is lifted to 4 because the description clarifies the interaction between parameters (e.g., the relationship between approval_token and minutes_markdown).

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

Purpose5/5

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

The description clearly states the verb (saving minutes to a file) and the resource (meeting minutes), with a precise condition (approval token match). It explicitly identifies itself as '이 서버에서 유일한 쓰기 도구' (the only write tool on this server), distinguishing it from all sibling tools, which are read/preview tools.

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?

Provides explicit preconditions: preview_save_minutes must return AWAITING_APPROVAL and issue a token, and the user must explicitly approve saving. It also gives an exclusion: '사용자가 "저장해"라고 말하지 않았다면 호출하지 마세요' (don't call unless the user says 'save'). This is clear, unambiguous guidance on when to invoke the tool.

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

validate_minutes_draftA
Read-onlyIdempotent

회의록 초안의 구조를 검사합니다. 저장 게이트입니다.

error가 하나라도 있으면 preview_save_minutes에서 승인 토큰이 발급되지 않습니다. 각 항목은 rule_id, severity, line, fix를 가지므로 다시 물어보지 않고 스스로 고칠 수 있습니다.

검사 항목: - error: H1 제목, 필수 섹션 7개, 실행 항목 표 헤더, 실행 항목 행의 칸 수 - warning: 섹션 순서, 기한 형식(YYYY-MM-DD 또는 '미정'), 자리표시자 잔존, '미정' 표기 누락, 리스크 표 헤더, 머리말의 '- 원문:' 항목

Args: minutes_markdown: 회의록 초안 전문.

Returns: ValidationResponse: valid, error_count, warning_count, issues[](rule_id/severity/message/fix/line).

Examples: - 사용: 초안을 쓴 직후, 저장 미리보기 전 - 사용하지 않음: 내용이 원문에 근거하는지 볼 때 → check_minutes_grounding

ParametersJSON Schema
NameRequiredDescriptionDefault
minutes_markdownYes검증할 회의록 초안 전문(마크다운)

Output Schema

ParametersJSON Schema
NameRequiredDescription
stageYes회의록 워크플로에서 지금 위치한 단계
validYes
issuesYes
statusYes이 호출의 결과 상태
error_countYes
next_actionsNo이어서 호출하면 좋은 도구 목록
warning_countYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the bar is lower. The description adds meaningful context by explaining the gate mechanism (errors block approval token in preview_save_minutes) and that issues include rule_id, severity, line, and fix so the agent can self-correct. This goes beyond what annotations convey and helps the agent understand downstream effects.

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

Conciseness4/5

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

The description is well-structured: purpose, gate explanation, validation item lists, Args/Returns/Examples. It front-loads the key purpose and gate. While somewhat long, every section serves a function and the bullet-point lists of error/warning items are directly actionable. Minor redundancy with the schema's parameter description prevents a 5.

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?

With an output schema present, the description need not detail return values, and it doesn't. It provides the validation item lists, the gate relationship, and usage timing. The examples clarify both when to use and when not to use. This is complete for an agent to call the tool correctly without missing critical 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?

Schema coverage is 100% and the single parameter minutes_markdown already has a clear description ('검증할 회의록 초안 전문(마크다운)'). The description's Args section essentially repeats this without adding new information. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds no meaningful extra semantics.

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 opens with a clear verb and resource: '회의록 초안의 구조를 검사합니다' (checks the structure of the minutes draft) and immediately labels it a '저장 게이트' (save gate). It distinguishes itself from siblings by explicitly naming check_minutes_grounding as the alternative for content-grounding checks, and the usage examples make the differentiation concrete.

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?

Provides explicit usage timing: '초안을 쓴 직후, 저장 미리보기 전' (right after drafting, before preview) and an explicit exclusion: when checking grounding, use check_minutes_grounding. This leaves no ambiguity about when to call this tool versus alternatives.

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. 11 tool updatesv0.1.0
    • First observedbuild_minutes_prompt
    • First observedcheck_minutes_grounding
    • First observeddiff_minutes_against_saved
    • First observedextract_note_facts
    • First observedlist_dummy_notes
    • First observedlist_saved_minutes
    • First observedpreview_save_minutes
    • First observedread_meeting_note
    • First observedread_minutes_audit_log
    • First observedsave_approved_minutes
    • First observedvalidate_minutes_draft

TDQS

A4.5/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct step in the meeting-minutes workflow: listing/reading notes, extracting facts, building prompts, validating structure, checking grounding, previewing, saving, listing saved minutes, and auditing. Even similar-sounding tools (diff, preview, check) serve clearly different purposes—diff compares against saved, preview gates with a token, and check verifies source grounding.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (list_dummy_notes, read_meeting_note, validate_minutes_draft, save_approved_minutes). Verbs clearly indicate action and objects are always the minute/note entity, making tool selection predictable.

Tool Count5/5

With 11 tools, the surface is well-scoped for a single domain: creating, validating, and saving meeting minutes. Each tool contributes a distinct function from note discovery through audit logging, with no redundancy or bloat.

Completeness5/5

The set covers the full lifecycle: list/read source notes, extract anchors, build prompt, validate draft, check grounding, preview with approval token, save (including overwrite protection via diff), list saved minutes, and audit. The only write path is gated and logged, so there are no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers