personal-meeting
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@personal-meetingGenerate a draft minutes from the incident_review note"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
My Own MCP Based on a Meeting Minutes Generation Project
An educational local MCP package that reads unstructured meeting notes, builds a meeting-minutes writing prompt, validates the draft, and saves it 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:
Explain the roles of MCP Host, Server, and Tool.
Run a local STDIO MCP server with Python.
Implement and modify a Tool that reads unstructured data.
Design write Tools with validation and approval boundaries.
Customize the MCP to their own meeting-minutes format.
Connect the server to Codex or Claude Desktop and demonstrate it working.
Design tool descriptions, schemas, responses, and errors from a harness engineering perspective.
Related MCP server: Local Knowledge Desk
What's Included
3 synthetic unstructured meeting notes at different difficulty levels
A working
FastMCPserver: 11 tools, 3 resources, 1 promptA standard meeting-minutes template
Approval-token-based saving and overwrite detection
A grounding checker against the source text
5 trainee lab workbooks
1 instructor answer key
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.pyTo use MCP Inspector, run:
uv run mcp dev src/meeting_mcp/server.pyProvided 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 → [사용자 승인] → SAVEDStep | Tool | Read/Write | Role |
DISCOVER |
| Read | View the 3 synthetic notes |
READ |
| Read | View the source text. Supports line ranges and |
GROUND |
| Read | Extract decision candidates, dates, and unconfirmed expressions with line numbers |
DRAFT |
| Read | Combine the template with the source text |
CHECK |
| Read | Structural validation. Provides |
CHECK |
| Read | Cross-check that people, dates, and figures exist in the source (advisory; does not block saving) |
PREVIEW |
| Read | Check the difference against the previously saved version |
PREVIEW |
| Read | Shows validation, grounding, and diff together and issues an approval token |
SAVED |
| Write | Saves only when the approval token matches (the only write tool) |
OBSERVE |
| Read | List saved meeting minutes |
OBSERVE |
| Read | View the save audit log |
Resources and Prompts
Type | URI or Name | Role |
Resource |
| Source meeting note |
Resource |
| Standard meeting-minutes template |
Resource |
| Saved meeting minutes |
Prompt |
| Meeting-minutes writing workflow including the approval boundary |
Harness Design
This server treats not only functionality but also the way the model uses the tools as a design target. See Lab 5 for details.
Every response includes
stageandnext_actions, so the model can pick the next tool from the response alone.Errors return a cause code, a recovery method, and selectable values together.
Argument schemas are kept flat (
{"note_id": "..."}). Using a Pydantic model as the argument type nests them as{"params": {...}}and changes the call shape.Return values are Pydantic models, so
outputSchemais generated automatically.Only definite checks (structure) block saving; heuristic checks (grounding) are only reported as warnings.
Every tool carries
readOnlyHint/destructiveHintto distinguish write tools.
Connecting to Codex
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 listIn 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 the MCP configuration of the same host.
Connecting to Claude Desktop
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.
Recommended Lab Prompts
personal-meeting MCP에서 사용 가능한 더미 회의 메모를 보여주세요.training_design 메모를 읽고, 제공된 회의록 템플릿에 맞춰 초안을 작성하세요.
원문에 없는 담당자와 기한은 추정하지 마세요.incident_review 메모에서 extract_note_facts로 ambiguity_flags를 먼저 확인하고,
확정되지 않은 항목은 전부 '미정'으로 남긴 회의록을 작성하세요.작성한 회의록을 validate_minutes_draft와 check_minutes_grounding으로 검증하고,
통과하면 preview_save_minutes까지만 실행하세요. 저장은 아직 하지 마세요.Training Sequence
Verification Commands
uv run pytest -q
uv run python scripts/smoke_stdio.py
uv run python scripts/validate_package.pyDesign Principles
MCP does not call any separate LLM API.
Codex or Claude handles summarization; MCP handles data, validation, and saving.
Information not confirmed in the source text is never generated, and the grounding checker mechanically cross-checks this.
Final saving requires both the approval token issued at preview and the user's explicit 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).In real training, no customer, employee, or contract-related data is used.
References
Base reference repository: https://github.com/kyopark2014/mcp
Codex MCP official docs: https://developers.openai.com/codex/mcp
MCP Python SDK: https://github.com/modelcontextprotocol/python-sdk
Available Tools
11 toolsbuild_minutes_promptARead-onlyIdempotent
회의 메모와 표준 템플릿을 결합한 회의록 작성 프롬프트를 반환합니다.
이 MCP는 LLM API를 호출하지 않습니다. 요약은 호스트(Claude/Codex)가 하고, 이 도구는 '무엇을 어떤 형식으로 쓸지'에 대한 지시문만 조립합니다.
Args: note_id: 메모 id. with_line_numbers: 원문 줄 번호 부착 및 인용 규칙 추가 여부 (기본 True).
Returns:
PromptResponse: prompt에 규칙 + 템플릿 + 원문이 담긴 지시문.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | 메모 id | |
| with_line_numbers | No | True면 원문에 줄 번호를 붙이고, 근거 칸에 'L14' 형태로 인용하도록 규칙을 추가합니다. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| prompt | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| note_id | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds meaningful context on top: the tool makes no external API calls and performs pure instruction assembly. This is genuinely informative behavior disclosure beyond the structured hints, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into a functional summary, a behavioral note, and labeled Args/Returns sections. It is efficiently written with no redundant sentences, and the key behavioral fact (no LLM call) is front-loaded. Slightly more compact phrasing is possible, but the structure is clean and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists for PromptResponse, the return format is already documented externally. The description notes the prompt contains rules + template + original text. Both parameters are covered by the schema, and annotations carry the safety profile. Nothing an agent needs to invoke this correctly appears to be missing for a tool of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; both note_id and with_line_numbers are already well-described in the schema, including the 'L14' citation-format detail. The description only briefly restates the parameters without adding new meaning. With full schema coverage, the baseline of 3 applies — the description contributes little beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'returns a minutes-writing prompt combining meeting notes and standard template'. It also clarifies the tool is not an LLM API caller, only an instruction assembler, which further sharpens the purpose. It doesn't explicitly name a sibling it is not, but the function is distinct enough among the listed siblings (all list/read/extract/validate/save operations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the division of labor ('summarization is done by the host; this tool only assembles instructions'), which implies when it should be used — as a prompt-preparation step before host-side summarization. However, it never explicitly says 'use this instead of X' or 'do not use when Y', and it names no alternative. The usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_minutes_groundingARead-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[].
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | 원본 메모 id | |
| max_findings | No | 돌려줄 최대 지적 건수 | |
| minutes_markdown | Yes | 검사할 회의록 초안 전문(마크다운) |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| checked | Yes | |
| note_id | Yes | |
| summary | Yes | |
| advisory | No | True. 근거 검사는 저장을 막지 않습니다. 저장 게이트는 validate_minutes_draft와 사용자 승인입니다. |
| findings | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses the heuristic nature, possible false positives, and that it does not block saving, and explains date normalization designed to avoid false positives on legitimate minutes. This adds meaningful behavioral context beyond the annotations (readOnlyHint/idempotentHint/destructiveHint) and does not contradict them in any way.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than most but well-structured with headers (검사 항목, 중요, Args, Returns) and bullet lists. Core purpose is front-loaded before details, and every section earns its place. Slight redundancy in the Returns section (output schema already covers the return structure) keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the moderate complexity, the description is complete: it covers purpose, check item catalog, advisory caveat, alternative validation tool, args, and return semantics. An agent has everything needed to call the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented in the schema. The description's Args section mostly restates schema content (note_id = original memo id, minutes_markdown = full draft text) with only marginal additions like the max_findings default of 30, which the schema already specifies. Baseline 3 applies since the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('역으로 대조' — reverse cross-check) and resource (people/dates/numbers in minutes vs. original memo text). It enumerates concrete check items (person_unsupported, date_unsupported, number_unsupported, etc.), which lets an agent know precisely what the tool inspects and distinguish it from validate_minutes_draft (structural) and read_meeting_note (source lookup).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly positions this as advisory: '자문(advisory)입니다... 저장을 막지 않습니다' and names the actual save gate as validate_minutes_draft(구조) + user approval, defining when-not. It also prescribes the follow-up workflow — re-check warnings against the original via read_meeting_note and mark as '미정' if ungrounded — leaving no inference about usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_minutes_against_savedARead-onlyIdempotent
이미 저장된 회의록과 초안의 차이를 보여 줍니다.
같은 note_id로 두 번째 저장을 하면 기존 파일을 덮어씁니다. 무엇이 사라지는지 먼저 확인해 사고를 막는 용도입니다.
Args: note_id: 메모 id. minutes_markdown: 초안 전문. diff_preview_lines: unified diff 미리보기 줄 수 (기본 40).
Returns:
DiffResponse: diff.write_mode가 CREATE / OVERWRITE / NO_CHANGE 중 하나.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | 메모 id | |
| minutes_markdown | Yes | 비교할 회의록 초안 전문 | |
| diff_preview_lines | No | 돌려줄 diff 미리보기 줄 수 |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| target | Yes | |
| note_id | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false; the description adds value beyond them by revealing the overwrite mechanism (second save with the same note_id replaces the file) and exposing the return mode enum (CREATE / OVERWRITE / NO_CHANGE). This is consistent with the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by the overwrite-safety context, then a compact Args/Returns block. It is efficient, though the Args section partially duplicates the schema's parameters, a minor redundancy given the 100% coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only diff tool with a full output schema (DiffResponse) and complete param schema, the description is nearly sufficient: it covers purpose, usage context, params, and the return mode. A minor gap is that edge cases (e.g., behavior when a note does not exist, implying CREATE) aren't spelled out, but the output schema largely covers the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The Args section largely restates the schema (note_id, 초안 전문, diff_preview_lines 기본 40) without adding syntax, format, or dependency details. Some added value comes from documenting the return enum, but that concerns the response, not the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'shows the difference between an already saved minutes and a draft' (이미 저장된 회의록과 초안의 차이를 보여 줍니다), and frames the purpose as a safety check to prevent overwrite accidents. It is clearly distinct from the write/validation siblings, though it never names an alternative like preview_save_minutes, so sibling differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete context for when to use it: a second save with the same note_id overwrites the existing file, so check what will be lost first. This is an explicit use-case statement, but it offers no 'when not to use' guidance and no alternative routing, leaving comparison against preview_save_minutes to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_note_factsARead-onlyIdempotent
초안을 쓰기 전에 원문에서 '인용 가능한 사실'을 줄 번호와 함께 뽑습니다.
할루시네이션을 막는 가장 효과적인 방법은 사후 검사가 아니라 사전 앵커링
입니다. 이 도구는 참석자, 발화 줄, 날짜 표현, 결정 후보, 실행 항목 후보,
그리고 특히 ambiguity_flags(확정되지 않은 표현이 있는 줄)를 돌려줍니다.
ambiguity_flags에 걸린 내용은 회의록에서 '미정'으로 남겨야 합니다.
Args: note_id: 메모 id. max_items_per_category: 분류별 최대 항목 수 (기본 15).
Returns:
NoteFactsResponse: 각 항목이 line(원문 줄 번호)과 text를 가집니다.
truncated_categories에 잘린 분류 이름이 들어갑니다.
Examples: - 사용: 초안 작성 직전, 근거 칸에 적을 앵커를 확보할 때 - 사용: 근거 검사에서 '담당자를 원문에서 찾지 못했습니다' 경고가 났을 때 - 사용하지 않음: 이미 완성된 초안을 검증할 때 → check_minutes_grounding
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | 메모 id | |
| max_items_per_category | No | 분류별 최대 항목 수. 컨텍스트 보호용입니다. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| note_id | Yes | |
| date_lines | Yes | |
| total_lines | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| participants | Yes | 참석자 줄에서 뽑은 이름(참고용) |
| speaker_lines | Yes | |
| ambiguity_flags | Yes | 확정되지 않은 표현이 있는 줄. 이 줄들은 '미정'으로 남겨야 합니다. |
| people_mentioned | Yes | 원문에 등장하는 이름 후보. 여기 없는 이름도 원문 본문에 있으면 정당한 담당자일 수 있습니다. |
| action_candidates | Yes | |
| decision_candidates | Yes | |
| truncated_categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, idempotent, non-destructive operation, so the safety profile is covered. Beyond that, the description adds valuable behavioral context: it discloses exactly what categories it returns (attendees, lines, dates, decision/action candidates) and the key semantics of ambiguity_flags — that flagged content should remain 'undetermined' in the minutes. The truncated_categories behavior is also surfaced. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and rationale, then uses clear Args/Returns/Examples sections. It is slightly verbose — the anti-hallucination philosophy paragraph is contextually useful but could be tightened. Overall well-structured with no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema (NoteFactsResponse) documents the return structure, the description appropriately focuses elsewhere: how to use it, when not to, and the ambiguity_flags contract for post-processing. The truncated_categories edge case is disclosed. The only mild gap is that it doesn't explicitly state the line-number anchoring behavior is by source line, though that's implied. Near-complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters, including max_items_per_category's 'context protection' purpose and its default/range. The description's Args section mostly restates this information without adding new meaning, so the schema carries the load. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource+objective: extracting 'citable facts' from the source text along with line numbers, before draft writing. It clearly distinguishes itself from check_minutes_grounding, which validates completed drafts. The inclusion of the anti-hallucination anchoring rationale clarifies both what it does and why it exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Examples section is exemplary: it names two explicit 'use' scenarios (before drafting, when grounding fails) and one explicit 'do not use' scenario with a named alternative (check_minutes_grounding for validating finished drafts). The agent gets direct routing instructions rather than having to infer fit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dummy_notesARead-onlyIdempotent
교육 패키지에 포함된 합성 비정형 회의 메모 목록을 조회합니다.
회의록 작업의 출발점입니다. 여기서 얻은 note_id를 다른 모든 도구에 넘깁니다.
Returns:
NoteListResponse: notes[]에 note_id, 제목, 난이도(초급/중급/고급),
줄 수, 글자 수, 그리고 has_minutes(이미 회의록을 저장한 메모인지)와
minutes_saved_utc(저장본의 마지막 수정 시각, 없으면 null)가 담깁니다.
has_minutes가 True인 메모는 저장 시 덮어쓰기가 되므로,
next_actions에 diff_minutes_against_saved가 함께 제시됩니다.
Examples: - 사용: "어떤 더미 메모가 있나요?" - 사용: "이미 회의록을 만든 메모가 있나요?" - 사용하지 않음: 이미 note_id를 알고 있고 원문이 필요할 때 → read_meeting_note
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| notes | Yes | |
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint all true/non-destructive), lowering the bar. The description adds meaningful context beyond annotations: the overwrite behavior for has_minutes=True notes on save, the recommendation of diff_minutes_against_saved, and the interpretation of minutes_saved_utc (null when absent). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, followed by the entry-point sentence, a structured Returns block, a warning, and an Examples section. Each section earns its place, though the Returns block is somewhat dense with field detail. Slightly long but uniformly useful with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for an entry-point list tool with an output schema present. It explains the workflow (start here, forward note_id), return semantics, the overwrite hazard, and usage/exclusion examples referencing the correct siblings (read_meeting_note, diff_minutes_against_saved). 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. There is nothing to document for parameters, and the description instead enriches the output semantics — clarifying that note_id is the key to pass onward and defining has_minutes/minutes_saved_utc meaning, which compensates fully for the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (조회/retrieves) and resource (synthetic unstructured meeting notes included in the education package), and clarifies the list nature. The entry-point framing and the explicit 'do not use when you have note_id → read_meeting_note' differentiates it from siblings. Distinguishes from list_saved_minutes by emphasizing the synthetic/dummy nature of the data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it is the starting point for all minutes work and that note_id should flow to other tools. Provides three worked examples of when to use and the single exclusion condition (already knowing note_id and needing the original text), naming read_meeting_note as the alternative. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_minutesARead-onlyIdempotent
이미 저장된 회의록 목록을 조회합니다.
같은 note_id로 저장하면 덮어쓰기가 되므로, 저장 전에 무엇이 있는지 확인하는 용도입니다.
Returns:
SavedListResponse: saved[]에 note_id, 경로, 줄 수, 수정 시각(UTC),
내용 해시 앞 16자.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| saved | Yes | |
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavioral context beyond those: it warns about overwrite behavior when using the same note_id, and describes the returned fields in a structured way. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the main purpose stated first, then an important caution, and a compact Returns section. Every sentence adds information, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no parameters and an output schema, the description covers the purpose, the typical usage scenario (pre-save check), and the return structure. It is complete and self-sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description correctly omits any parameter details. According to the rubric, baseline is 4 for 0-parameter tools, and no further explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists saved meeting minutes ('이미 저장된 회의록 목록을 조회합니다'). It distinguishes itself from writing tools by explicitly framing its purpose as a pre-save check, making it unambiguous which sibling it complements (e.g., save_approved_minutes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: '같은 note_id로 저장하면 덮어쓰기가 되므로, 저장 전에 무엇이 있는지 확인하는 용도입니다.' It does not explicitly name alternatives, but the use case is well-defined and self-explanatory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_save_minutesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | 메모 id | |
| include_preview | No | True면 회의록 전문을 응답에 그대로 되돌려줍니다. 이미 초안을 들고 있다면 False로 두어 컨텍스트를 아끼세요. | |
| minutes_markdown | Yes | 저장할 회의록 전문(마크다운) | |
| max_preview_chars | No | preview 최대 길이 |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| target | Yes | |
| note_id | Yes | |
| preview | No | |
| grounding | Yes | |
| validation | Yes | |
| write_mode | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| approval_token | Yes | 검증을 통과했을 때만 발급됩니다. 이 토큰은 사용자 승인을 대신하지 않습니다. |
| approval_request | Yes | 사용자에게 그대로 보여 주고 승인을 받을 문장 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so no credit for those. The description adds genuinely useful context: the token is a hash of (note_id, text) so the approved content cannot diverge from what is saved, and the token does NOT substitute for user approval — the approval_request must be shown and explicit consent obtained. This is material behavioral disclosure not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded: purpose in the first line, then the critical behavioral rules, then Args/Returns. The Args block in the description is somewhat redundant with the fully-covered input schema, which costs a little efficiency, but every other sentence earns its place and the Returns section usefully enumerates the response fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with an output schema present and full schema description coverage, the description covers the essentials: purpose, pipeline position, token semantics, and the mandatory user-approval handoff before calling save_approved_minutes. Slight room remains on what an agent should do on a NEEDS_REVISION status, but nothing blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a meaningful description in the schema, including usage guidance for include_preview ('이미 초안을 들고 있다면 False로 두어 컨텍스트를 아끼세요'). The description's Args block largely mirrors the schema verbatim, adding marginal value beyond the structured field definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb plus resource: '저장 대상·변경 내용·검증·근거 결과를 한 번에 보여 주고 승인 토큰을 발급합니다' (shows save target/changes/validation/grounding and issues an approval token). The follow-up '저장 직전의 단일 관문입니다' (the single gateway before saving) positions it against siblings, clearly distinguishing it from save_approved_minutes and validate_minutes_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear workflow context: it is the mandatory single gate before saving, the token is issued only when structural validation passes, and save_approved_minutes should be invoked only after explicit user approval. It does not enumerate exclusions for other siblings like diff_minutes_against_saved or validate_minutes_draft, but it does identify the pipeline position and the next tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_meeting_noteARead-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 목록이 함께 담깁니다.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | list_dummy_notes가 돌려준 메모 id (예: 'launch_sync') | |
| end_line | No | 읽기를 끝낼 줄 번호. 생략하면 끝까지 읽습니다. | |
| start_line | No | 읽기 시작할 줄 번호(1부터) | |
| with_line_numbers | No | True면 'L14 | 내용' 형태로 줄 번호를 붙입니다. 회의록 근거 칸에 인용 앵커를 적을 때 사용합니다. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| content | Yes | |
| note_id | Yes | |
| end_line | Yes | |
| truncated | Yes | |
| start_line | Yes | |
| total_lines | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
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 covered. The description adds valuable behavioral context: the Raises section lists specific ToolFailure error types (NOTE_NOT_FOUND / INVALID_NOTE_ID) and mentions that a list of available note_ids is included in error messages. It also describes the return fields (content, total_lines, truncated). This goes beyond annotations and helps the agent anticipate failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args, Returns, and Raises sections. The purpose is front-loaded, each sentence contributes meaning (e.g., why range is useful, how line numbers are used), and there is no redundancy. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description does not need to fully explain return values, but it still does. It covers error cases, parameter semantics, and usage context. It is complete for a read-only tool with simple parameters and annotations already covering safety. The agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds meaningful usage context beyond the schema: it explains that with_line_numbers is used for citation anchors in the meeting minutes grounding column, and clarifies that end_line omitted means read to the end. This is extra semantic value beyond mere restating, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'read the original text of a synthetic meeting note by note_id' with a specific verb and resource. It distinguishes from sibling tools like list_dummy_notes and extract_note_facts implicitly, but does not explicitly name an alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use the range parameters (to avoid wasting context on long notes, and to re-check only lines with warnings), but does not explicitly address when to choose this tool over siblings or when not to use it. There is no mention of alternative tools, so it partially meets the dimension but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_minutes_audit_logARead-onlyIdempotent
회의록 저장 감사 로그를 최신순으로 조회합니다.
AWAITING_APPROVAL → SAVED 흐름의 실행 증거를 제출할 때 사용합니다.
각 이벤트에는 시각, note_id, write_mode, 변경 줄 수, 내용 해시가 담깁니다.
Args: limit: 최대 건수 (기본 20). note_id: 특정 메모로 필터링 (선택).
Returns:
AuditResponse: events[] 최신순.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 최신순 최대 건수 | |
| note_id | No | 특정 메모로 필터링. 생략하면 전체. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| events | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral details: each event contains 시각 (time), note_id, write_mode, 변경 줄 수 (changed line count), and 내용 해시 (content hash), and the response is ordered latest first. This gives the agent a concrete expectation of what the audit log contains without repeating annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, a usage context line, and a compact Args/Returns block. It front-loads the main action and use case, then provides the essential parameter and return information. There is minor redundancy (e.g., Args block partially repeats schema descriptions), but it's not excessive. The description is concise and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only audit log tool with an existing output schema (AuditResponse), the description covers the key aspects: the purpose, the specific flow it supports, the event contents, and the ordering. It doesn't explicitly mention pagination or that it only covers saved minutes (not drafts), but these are minor gaps given the output schema and the simplicity of the tool. The description is complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both limit and note_id have clear descriptions in the schema). The description adds some context (e.g., that limit is for 최신순 최대 건수, note_id filters a specific memo) but does not provide significantly different information beyond what the schema already documents. Since the schema carries the burden, the baseline 3 applies; the description doesn't go beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (조회/retrieve), a specific resource (회의록 저장 감사 로그/minutes save audit log), and the ordering (최신순/latest first). It further clarifies the intended use case (submitting execution evidence for the AWAITING_APPROVAL → SAVED flow), which distinguishes it from sibling tools like list_saved_minutes or read_meeting_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'AWAITING_APPROVAL → SAVED 흐름의 실행 증거를 제출할 때 사용합니다.' This is a clear context for use. It doesn't explicitly name alternatives or exclusion criteria, but the purpose itself naturally separates it from siblings (e.g., list tools are for listing, read tools are for single notes). The context provided is sufficient for an agent to decide when this is the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_approved_minutesADestructiveIdempotent
미리보기에서 발급된 승인 토큰이 일치할 때만 회의록을 파일로 저장합니다.
이 서버에서 유일한 쓰기 도구입니다. 호출 전 반드시 두 조건을 만족해야 합니다.
preview_save_minutes가
AWAITING_APPROVAL을 돌려주고 토큰을 발급했다.사용자가 그 내용을 보고 명시적으로 저장을 승인했다.
토큰은 기술적 무결성(승인한 내용 == 저장되는 내용)만 보장합니다. 사용자 승인을 대신하지 않습니다. 사용자가 "저장해"라고 말하지 않았다면 호출하지 마세요.
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. 모두 복구 방법이 메시지에 포함됩니다.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | 메모 id | |
| approval_token | Yes | preview_save_minutes가 발급한 승인 토큰 | |
| minutes_markdown | Yes | 저장할 회의록 전문. preview_save_minutes에 넘긴 것과 한 글자라도 다르면 토큰 검증에 실패합니다. | |
| expected_write_mode | No | 미리보기에서 본 write_mode. 지정하면 실제 상태와 다를 때 저장을 거부합니다. 덮어쓰기 사고 방지용입니다. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| audit | Yes | |
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| status | Yes | 이 호출의 결과 상태 |
| note_id | Yes | |
| write_mode | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this is a write/destructive operation (consistent with destructiveHint), requires explicit user consent beyond the token, and explains that the token only ensures technical integrity, not user approval. It also details failure modes with recovery information, adding safety-critical context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a bolded uniqueness statement, numbered prerequisites, and separate sections for Args, Returns, and Raises. It front-loads the critical condition (token match) and is not unnecessarily verbose given the complexity, though it could trim some repetition of parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary aspects: when to use, prerequisites, user consent, parameter meanings, return values, and error recovery. Since an output schema exists, it doesn't need to detail the response shape further, making it fully complete for a write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters with clear descriptions, including the exact-match requirement for minutes_markdown and the safety purpose of expected_write_mode. The description repeats these details rather than adding new meaning, so it adds minimal value beyond the schema, which has full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: saving meeting minutes to a file only when the approval token matches. It also explicitly identifies itself as the only write tool on the server, distinguishing it from preview_save_minutes and other read-oriented siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies exact prerequisites: preview_save_minutes must have returned AWAITING_APPROVAL and issued a token, and the user must have explicitly approved. It warns not to call unless the user has said to save, and names the only write tool, leaving no ambiguity about when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_minutes_draftARead-onlyIdempotent
회의록 초안의 구조를 검사합니다. 저장 게이트입니다.
error가 하나라도 있으면 preview_save_minutes에서 승인 토큰이 발급되지
않습니다. 각 항목은 rule_id, severity, line, fix를 가지므로
다시 물어보지 않고 스스로 고칠 수 있습니다.
검사 항목: - error: H1 제목, 필수 섹션 8개('## 고객 영향' 포함), 실행 항목 표 헤더, 실행 항목 행의 칸 수 - 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
| Name | Required | Description | Default |
|---|---|---|---|
| minutes_markdown | Yes | 검증할 회의록 초안 전문(마크다운) |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | 회의록 워크플로에서 지금 위치한 단계 |
| valid | Yes | |
| issues | Yes | |
| status | Yes | 이 호출의 결과 상태 |
| error_count | Yes | |
| next_actions | No | 이어서 호출하면 좋은 도구 목록 |
| warning_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds context beyond that: it's a gate for preview_save_minutes, and issues include a 'fix' field enabling self-correction without asking. This is valuable behavioral insight not present in the annotations, though the description could have elaborated on the response format details if needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured and front-loaded: it states the purpose and gate behavior first, then uses bullet points for the check items and concise examples. The inclusion of the list of error and warning categories is informative and not redundant. It is slightly long but appropriate for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does, when to use it (and when not to), what it returns (via Returns section), and the check categories. With an output schema present, the return format is already specified, and the description does not need to duplicate it. It is self-sufficient for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%—the parameter 'minutes_markdown' is documented as '검증할 회의록 초안 전문(마크다운)' in the schema, and the description's Args section repeats this without adding new semantics. Since the schema already fully explains the parameter, the description adds no extra value here, warranting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb ('검사합니다') and resource ('회의록 초안의 구조') clearly, and positions it as a '저장 게이트' (storage gate). It lists specific error and warning categories, making the tool's purpose unambiguous. It also differentiates from siblings by naming check_minutes_grounding as the alternative for content grounding checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage context is given: use after drafting and before preview_save_minutes, and not for verifying content against the original text—instead use check_minutes_grounding. It also explains that errors block the approval token, which is a key workflow constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v0.1.0- First observed
build_minutes_prompt - First observed
check_minutes_grounding - First observed
diff_minutes_against_saved - First observed
extract_note_facts - First observed
list_dummy_notes - First observed
list_saved_minutes - First observed
preview_save_minutes - First observed
read_meeting_note - First observed
read_minutes_audit_log - First observed
save_approved_minutes - First observed
validate_minutes_draft
TDQS
Each tool has a distinct role in the minutes-generation workflow: listing notes, saving minutes, reading content, extracting facts, building prompts, validating structure, checking grounding, diffing, previewing, and saving. No two tools overlap in purpose, and descriptions clearly differentiate list_dummy_notes from list_saved_minutes and validation from grounding checks.
All tool names follow a consistent verb_noun snake_case pattern (list_, read_, extract_, build_, validate_, check_, diff_, preview_, save_). This uniform convention makes the tool set predictable and easy to navigate for an agent.
With 11 tools, the server covers the full lifecycle of meeting minutes creation without being bloated. Each tool serves a clear purpose in the pipeline, and the count is well-scoped for the domain.
The workflow is nearly complete: listing, reading, extracting facts, building prompts, validating, grounding, diffing, previewing, and saving. The only notable gap is the absence of a tool to read the full content of a saved minute (only metadata via list_saved_minutes and diff via diff_minutes_against_saved), which agents could work around.
Maintenance
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
MCP server for generating rough-draft project plans from natural-language prompts.
Memoket — access your recording transcripts, summaries, and key takeaways over MCP.
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server for reading, editing, and validating Microsoft Word documents with specialized support for track changes, comments, and footnotes. It enables structural auditing, heading extraction, and precise OOXML-level document manipulation through natural language tools.10043MIT
- FlicenseAqualityBmaintenanceA local MCP server for managing Markdown notes, enabling create, list, read, search, summarize, and delete operations through natural language.61-
- FlicenseNot gradedqualityCmaintenanceProvides lightweight documentation review tools including issue detection, readability scoring, style checking, and document summarization for integration with MCP-compatible clients.-
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for searching and retrieving LogicNotes meeting notes, including summaries, transcripts, and action items.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/minsik102/fileanalyzer_mcp_testmode'
If you have feedback or need assistance with the MCP directory API, please join our Discord server