Skip to main content
Glama

plant-mcp

반려식물의 물주기와 상태를 기록하고 조회하는 MCP(Model Context Protocol) 서버입니다. Claude Desktop에 연결하면 대화로 식물을 관리할 수 있습니다.

"몬스테라 물 줬어" → 기록됨 "오늘 뭐 목말라?" → 밀린 순서로 알려 줌 "몬스테라 아랫잎이 노래져" → 관리 이력을 근거로 원인 추정

왜 MCP인가

식물 관리 앱은 이미 많습니다. 이 프로젝트의 목적은 앱을 하나 더 만드는 게 아니라, 내 개인 데이터를 LLM이 직접 다룰 수 있는 형태로 노출하는 것입니다. 사용자는 UI를 익힐 필요 없이 평소 말투로 기록하고, 조회하고, 상담합니다.

Related MCP server: mcp_hydration

MCP 3요소를 모두 사용

구성요소

이 프로젝트에서의 쓰임

Tools (9개)

등록·기록·수정·삭제·조회. LLM이 호출하는 동작

Resources

plant://{name} — 식물 한 그루의 프로필을 JSON으로 노출

Prompts

diagnose — 증상과 관리 이력을 묶어 진단을 요청하는 템플릿

Tools

하는 일

add_plant

식물 등록 (품종·위치·물주기 간격·입양일)

log_watering

물 준 기록. 날짜 생략 시 오늘

log_note

관찰 기록 ("아랫잎이 노래짐", "새순 나옴")

update_plant

품종·위치·물주기 간격 수정

remove_plant

삭제. confirm=True 없이는 실행되지 않음

list_plants

전체 목록 + 경과일 + 다음 예정일

plants_needing_water

물 줄 때가 된 것만, 많이 밀린 순

get_plant

한 그루 상태 요약

plant_history

물주기·관찰 기록 통합 타임라인

조회 툴은 구조화된 JSON을 돌려주고, 기록 툴은 사람이 읽을 수 있는 확인 문장을 돌려줍니다. LLM이 결과를 그대로 사용자에게 전달해도 자연스럽도록 한 설계입니다.

설계 노트

  • 파괴적 동작에는 가드를 뒀습니다. remove_plant는 첫 호출에서 삭제하지 않고 확인을 요구하는 문장을 돌려줍니다. LLM이 실수로 데이터를 날리지 못하게 하는 최소한의 안전장치입니다.

  • 오류 메시지를 LLM이 고쳐 부를 수 있게 썼습니다. 없는 식물을 조회하면 등록된 식물 목록을 함께 돌려주므로, 오타가 있어도 다음 호출에서 바로 교정됩니다.

  • 저장 계층을 서버와 분리했습니다. storage.py는 MCP를 모릅니다. 서버 없이 단독 테스트가 가능하고, 나중에 다른 인터페이스를 붙이기도 쉽습니다.

  • 커넥션은 호출마다 엽니다. 서버가 툴을 여러 스레드에서 실행해도 안전합니다.

  • DB 경로가 설치 방식에 의존하지 않습니다. 패키지 위치가 아니라 OS의 사용자 데이터 폴더를 씁니다. 편집 설치든 일반 설치든 같은 DB를 가리킵니다.

설치

필요한 것: uv, Python 3.12 이상

git clone <repo> plant-mcp
cd plant-mcp
uv sync

Claude Desktop 연결

claude_desktop_config.json에 다음을 추가합니다.

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "plant-care": {
      "command": "<프로젝트 경로>/.venv/Scripts/plant-mcp.exe"
    }
  }
}

macOS·Linux에서는 command<프로젝트 경로>/.venv/bin/plant-mcp로 지정합니다. 저장한 뒤 Claude Desktop을 완전히 종료했다가 다시 실행해야 서버가 잡힙니다.

데이터 저장 위치

기본값은 OS의 사용자 데이터 폴더입니다.

  • Windows: %LOCALAPPDATA%\plant-mcp\plants.db

  • macOS·Linux: ~/.local/share/plant-mcp/plants.db

PLANT_MCP_DB 환경변수로 바꿀 수 있습니다.

{
  "mcpServers": {
    "plant-care": {
      "command": "...",
      "env": { "PLANT_MCP_DB": "D:/data/plants.db" }
    }
  }
}

SQLite 파일 하나이므로 백업은 복사, 이전은 이동으로 끝납니다.

다른 기기에서 이어서 작업하기

새 컴퓨터에 설치

git clone https://github.com/azureiraraavis-png/plant-mcp.git
cd plant-mcp
uv sync

그다음 그 기기의 claude_desktop_config.json에 등록합니다. 경로는 OS마다 다릅니다.

OS

설정 파일

command

Windows

%APPDATA%\Claude\claude_desktop_config.json

<프로젝트>\.venv\Scripts\plant-mcp.exe

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

<프로젝트>/.venv/bin/plant-mcp

command에는 절대 경로를 넣어야 합니다. 저장한 뒤 Claude Desktop을 완전히 종료했다가 다시 실행합니다.

기존 설정에 다른 MCP 서버가 이미 있다면 mcpServers 안에 항목만 추가하세요. 설정 파일 전체를 덮어쓰면 Claude Desktop의 다른 설정이 날아갑니다.

기록(DB)은 따라오지 않습니다

코드는 git으로 옮겨가지만 plants.db기기마다 별개입니다. 개인 기록이라 저장소에 넣지 않기 때문입니다(.gitignore*.db).

기기 간에 같은 기록을 보시려면 PLANT_MCP_DB를 클라우드 동기화 폴더로 지정합니다.

{
  "mcpServers": {
    "plant-care": {
      "command": "...",
      "env": { "PLANT_MCP_DB": "C:/Users/사용자명/OneDrive/plant-mcp/plants.db" }
    }
  }
}

두 가지를 주의하셔야 합니다.

  • 두 기기에서 동시에 쓰면 DB가 손상될 수 있습니다. SQLite는 클라우드 동기화를 전제하지 않습니다. Claude Desktop을 양쪽에서 동시에 켜두지 마세요.

  • OneDrive·Google Drive의 온디맨드 기능으로 파일이 클라우드에만 있으면 읽기가 실패할 수 있습니다. 해당 폴더를 **"이 디바이스에 항상 유지"**로 설정하세요.

한 기기에서만 쓰신다면 기본 경로 그대로 두는 편이 안전합니다.

휴대폰에서는 아직 안 됩니다

Claude 모바일 앱은 로컬 stdio MCP 서버를 붙일 수 없습니다. 폰에서 쓰려면 이 서버를 원격 MCP(HTTP)로 전환해 인터넷에 호스팅해야 합니다. 코드 변경 자체는 작지만 (run("stdio")run("streamable-http")) 호스팅과 인증이 별도 작업입니다. 로드맵에 있습니다.

사용 예시

나:     거실 창가에 몬스테라 들였어. 일주일에 한 번 물 주면 된대.
Claude: (add_plant 호출) '몬스테라' 등록했습니다. 7일마다 물주기로 잡아뒀어요.

나:     오늘 몬스테라 물 흠뻑 줬어
Claude: (log_watering 호출) 기록했습니다. 다음 예정일은 8월 7일이에요.

나:     오늘 뭐 목말라?
Claude: (plants_needing_water 호출) 산세베리아가 3일 밀렸습니다.

나:     몬스테라 아랫잎이 계속 노래져
Claude: (diagnose 프롬프트 + plant_history 참고)
        마지막 물주기가 11일 전이고 간격이 7일이니 물부족 가능성이 우선...

데이터 모델

plants     id, name(unique), species, location, acquired_on,
           water_every_days, created_at
waterings  id, plant_id → plants, watered_on, amount, created_at
notes      id, plant_id → plants, noted_on, body, created_at

needs_water는 저장하지 않고 조회 시점에 계산합니다 (마지막 물준 날 + 간격 <= 기준일). 배치 작업이나 갱신 로직이 필요 없습니다.

개발

저장 계층만 단독으로 두드려 보기:

uv run python -c "from plant_mcp import storage; print(storage.list_plants())"

서버를 직접 띄우기:

uv run plant-mcp

stdio로 JSON-RPC를 주고받으므로 터미널에서는 응답 없이 대기하는 것이 정상입니다.

로드맵

  • 관리 기록 서버 (Tools / Resources / Prompts)

  • 식물 관리 지식베이스 RAG 검색 툴 추가

  • 물주기 간격 자동 보정 (계절·실제 기록 기반)

라이선스

MIT

Available Tools

9 tools
add_plantA

새 식물을 등록한다. water_every_days는 물주기 간격(일)이며 모르면 기본값 7을 쓰고 나중에 update_plant로 조정한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
speciesNo
locationNo
acquired_onNo
water_every_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It supplements the schema by explaining that water_every_days is the watering interval in days, and that using the default is acceptable when unsure, with a later correction path. This goes beyond the raw schema and is useful behavioral context.

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

Conciseness5/5

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

The description is a single, focused sentence that front-loads the purpose and immediately provides a helpful parameter tip. No wasted words, clear and efficient.

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

Completeness3/5

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

The tool has 5 parameters and no annotations, but the description only sheds light on one parameter. It covers the core purpose and the default behavior for water_every_days, but leaves other parameters, return values, and error handling undocumented. Given the simplicity of a create operation and the existence of an output schema, this is partially complete but with notable gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. However, it only explains water_every_days, leaving name, species, location, and acquired_on without additional semantic meaning beyond their names. The watering interval guidance is helpful, but most parameters are not elaborated.

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 action: 'Registers a new plant' (새 식물을 등록한다). The verb 'register' and resource 'plant' are specific, and it distinguishes from siblings like remove_plant, update_plant, and get_plant.

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 practical usage guidance for the water_every_days parameter: if unknown, use the default 7 and adjust later with update_plant. This explicitly names an alternative tool for adjustments, though it doesn't broadly discuss when to use this tool versus other plant-related tools.

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

get_plantB

식물 한 그루의 현재 상태 요약을 돌려준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
as_ofNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only restates the function ('returns summary') without disclosing side effects, return format, error behavior, or any operational nuances. For a simple getter, this is minimal but not rich.

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

Conciseness4/5

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

The description is a single efficient sentence with no wasted words. However, it is under-specified, which limits the value of its brevity.

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

Completeness2/5

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

With an optional 'as_of' parameter, no annotation coverage, and no parameter explanations, the description is incomplete. The existence of an output schema helps, but the description fails to guide proper invocation or parameter usage.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain either parameter. 'name' is inferable from context, but 'as_of' is completely undocumented, leaving a significant gap for the agent.

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 returns a current status summary for a single plant. This is a specific verb+resource combination that differentiates it from siblings like list_plants (all plants) and plant_history (historical data).

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

Usage Guidelines3/5

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

The description implies usage when one wants the current status of a single plant. However, it provides no explicit exclusions or comparisons to alternatives like plant_history or list_plants, leaving some inference required.

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

list_plantsA

등록된 모든 식물을 마지막 물준 날, 경과일, 다음 예정일과 함께 돌려준다. as_of를 주면 그 날짜 기준으로 계산한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the key behavior: returns all plants with watering-relevant fields and the as_of calculation effect. However, it does not mention return format, pagination, or any potential performance implications, which would be useful for a full list operation.

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

Conciseness5/5

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

A single, well-structured sentence states the primary purpose first, followed by the optional parameter behavior. No filler or redundancy. Front-loaded and efficient.

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

Completeness4/5

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

Given the tool's low parameter count and presence of an output schema, the description sufficiently covers the essential behavior. It explains what data is returned and how the optional date parameter affects computation. Could be marginally improved by referencing the filtered sibling tool, but is otherwise complete.

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

Parameters4/5

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

The schema has one parameter (as_of) with no description (0% coverage). The description compensates by explicitly explaining its meaning: if provided, calculations are based on that date. This adds meaningful context beyond the schema's bare type definition.

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

Purpose4/5

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

The description clearly states the tool's function: returning all registered plants with computed fields (last watered, elapsed days, next scheduled date). It distinguishes from sibling tools like get_plant (single plant) and plants_needing_water (filtered list) by emphasizing 'all registered plants,' though it does not explicitly name these alternatives.

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

Usage Guidelines3/5

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

Usage is implied: use when you need a comprehensive list of all plants with watering schedule details. The as_of parameter is explained for date-relative calculations. However, there is no explicit guidance on when to prefer this over siblings like plants_needing_water, or when not to use it.

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

log_noteB

식물의 상태 변화를 기록한다. '아랫잎이 노래짐', '새순 나옴' 처럼 관찰한 내용을 그대로 남긴다.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
noteYes
noted_onNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It indicates a write operation ('기록한다' = records) and clarifies that observations are left as-is, but does not disclose return behavior, permissions, or mutability. It is not misleading, but incomplete.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the purpose and followed by clarifying examples. No wasted words; every part earns its place.

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

Completeness3/5

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

While the output schema covers return values, the description lacks essential context about the 'name' parameter referring to an existing plant and when to use this vs log_watering. It is adequate for a simple note logger but has clear gaps in the broader tool ecosystem.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only provides context for the 'note' parameter via examples. The 'name' parameter is not explained as the plant identifier, and 'noted_on' is completely unaddressed. The description fails to compensate for the lack of schema documentation.

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

Purpose4/5

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

The description clearly states the tool records plant state changes, with explicit examples of observation content. It distinguishes itself from sibling tools like log_watering by focusing on observational notes rather than watering events.

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

Usage Guidelines3/5

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

Usage is implied through the examples and context (plant observations vs watering), but no explicit when-to-use or alternative tool references are provided. The description lacks direct guidance on when to choose this over log_watering.

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

log_wateringA

물을 준 사실을 기록한다. watered_on을 생략하면 오늘로 기록한다. amount에는 '흠뻑', '200ml' 같은 메모를 남길 수 있다.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
amountNo
watered_onNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description adds behavior details: the date defaults to today if omitted, and amount accepts free-form memos. It does not disclose potential side effects like updating plant status or require an existing plant, but it conveys the core behavior.

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

Conciseness5/5

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

The description is three short, front-loaded sentences, each adding useful information. No redundant or filler content.

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 simple logging tool with an output schema, the description covers the main purpose, key parameters, and default behavior. It omits any side effects or error conditions, but the tool is straightforward and the output schema covers return values.

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

Parameters3/5

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

The description explains the watered_on parameter default and the amount parameter format ('흠뻑', '200ml'), but leaves the required name parameter unexplained. With 0% schema coverage, this partial compensation is helpful but incomplete.

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

Purpose4/5

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

The description clearly states the tool logs watering events with a specific verb ('records') and resource (watering). It is clear but doesn't explicitly differentiate from sibling tools like log_note, though the domain is specific enough.

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

Usage Guidelines3/5

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

The description implies the usage context (logging watering) but provides no explicit guidance on when to choose this over alternatives. It mentions behavioral details like the default date but not any exclusions or prerequisites.

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

plant_historyA

식물의 물주기·관찰 기록을 최신순 타임라인으로 돌려준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses the return format (timeline, latest-first) and content (watering/observation records). It does not explicitly state read-only, but 'returns' implies a safe read operation, which is sufficient for this simple tool.

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

Conciseness5/5

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

The description is a single, focused sentence that immediately states the tool's purpose and ordering. No unnecessary words or repetition.

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

Completeness4/5

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

Given the simple tool type and presence of an output schema, the description covers the core behavior well. However, the lack of parameter explanations and explicit usage guidance leaves minor gaps, but the description is not misleading.

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

Parameters2/5

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

The input schema has no parameter descriptions (0% coverage), and the description does not explain 'name' or 'limit'. The description only implies that 'name' refers to a plant, but adds no detail about the limit parameter or their semantics. This is a clear gap.

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 returns watering/observation records as a latest-first timeline. The verb 'returns' and resource 'plant's records' are specific, and it distinguishes itself from sibling tools like get_plant and list_plants by focusing on historical records.

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

Usage Guidelines4/5

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

The description implies use for viewing a plant's history, with clear context from the content type and ordering. It does not explicitly mention alternatives or exclusions, but the purpose is evident from the tool's name and siblings.

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

plants_needing_waterA

지금 물을 줘야 하는 식물만 돌려준다. 많이 밀린 순서로 정렬된다. '오늘 뭐 목말라?' 같은 질문에 쓴다.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of behavioral disclosure. It mentions the sort order (overdue amount) and that it returns only needing-water plants, but does not state its read-only nature explicitly or any other side effects. Some behavioral context is provided, but more could be said about the time aspect (as_of).

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the main action ('returns only plants needing water') and then provides additional details (sorting and usage example). No wasted words.

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

Completeness3/5

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

Given there is an output schema and the tool is a simple query, the description covers the core behavior. However, the unexplained 'as_of' parameter leaves the input semantics incomplete. It could also mention that it is read-only, but overall it's mostly adequate.

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

Parameters2/5

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

The schema has one optional parameter 'as_of' with zero coverage (no description). The tool description does not explain what 'as_of' does or how it affects the results, providing no added meaning beyond the type. This is a significant gap.

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

Purpose5/5

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

Description clearly states the tool returns only plants needing water, sorted by overdue degree. This distinguishes it from siblings like list_plants (which would list all plants), and the example query clarifies its purpose.

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?

Explicit use case is given: 'Use for questions like Who's thirsty today?' This tells the agent when to invoke this tool. However, it does not explicitly mention when not to use it or contrast with list_plants, so it misses a bit of exclusion guidance.

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

remove_plantA

식물과 그에 딸린 모든 기록을 삭제한다. 되돌릴 수 없으므로 반드시 사용자에게 먼저 확인을 받고 confirm=True로 호출할 것.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden. It discloses that the operation is irreversible, deletes not just the plant but all associated records, and requires confirmation. This goes beyond a generic 'deletes a plant' and gives critical behavioral context.

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

Conciseness5/5

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

Two sentences, no fluff. The first sentence states the action, the second provides the critical condition. Each word earns its place.

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 the tool's behavior, including its scope, irreversibility, and prerequisites. Since an output schema exists, return values need not be described. It is complete for the tool's complexity.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies that 'name' refers to the plant to be deleted, and it explicitly states the 'confirm' parameter must be set to True, explaining its purpose and necessity.

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 '삭제한다' (deletes) and the resource '식물과 그에 딸린 모든 기록' (plant and all associated records). This distinguishes it from sibling tools like get_plant, update_plant, and list_plants.

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 tells the agent when to use this tool: only after receiving user confirmation, and it must be called with confirm=True. This provides a clear condition and implies when not to use it (without confirmation).

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

update_plantA

등록된 식물의 품종·위치·물주기 간격을 수정한다. 전달한 항목만 바뀐다.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
speciesNo
locationNo
water_every_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose the important partial-update behavior ('only passed items change') and implies the plant must already exist via '등록된 식물'. However, it does not describe error conditions, return behavior, or side effects, leaving some transparency gaps for a mutation tool.

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

Conciseness5/5

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

The description consists of two short sentences, front-loaded with the verb and resource. Every word is meaningful, and the partial-update note is delivered efficiently without redundancy.

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

Completeness4/5

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

For a simple update tool with an output schema present, the description adequately covers the core behavior and the key nuance of partial updates. It doesn't need to explain return values since the output schema exists, and the sibling list provides context. Minor gaps like error handling are acceptable at this complexity level.

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

Parameters4/5

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

The schema itself has no descriptions for its four parameters, and the context signals indicate 0% schema description coverage. The description compensates by explicitly mapping species, location, and water_every_days to their Korean terms, and the partial-update note clarifies how omitted parameters behave. However, the 'name' parameter's role as an identifier is only implicit.

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 specific verb ('수정한다' meaning 'modifies') and identifies the resource ('등록된 식물' meaning 'registered plant') along with the specific fields (species, location, watering interval). This clearly distinguishes the tool from siblings like add_plant and remove_plant, and the partial-update note further clarifies its unique function.

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 makes it clear that this tool is for updating existing registered plants and that only passed fields are changed, which is a key usage guideline. However, it does not explicitly mention when not to use it or name alternatives, though the tool name and sibling list imply the distinction.

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. 9 tool updatesv0.1.0
    • First observedadd_plant
    • First observedget_plant
    • First observedlist_plants
    • First observedlog_note
    • First observedlog_watering
    • First observedplant_history
    • First observedplants_needing_water
    • First observedremove_plant
    • First observedupdate_plant

TDQS

A3.8/5.0

Scored across 9 tools

Disambiguation5/5

Each tool serves a clearly distinct purpose: plant CRUD (add, get, update, remove, list), event logging (watering, notes), and specialized queries (history, needing water). Even closely related tools like list_plants and plants_needing_water are unambiguously differentiated by their descriptions.

Naming Consistency4/5

Most tools follow a consistent verb_noun snake_case pattern (add_plant, log_watering, update_plant, remove_plant, list_plants). Two tools, plant_history and plants_needing_water, deviate by being noun phrases, but the overall pattern remains readable and predictable.

Tool Count5/5

With 9 tools, the server is well-scoped for a plant care domain. Each tool earns its place by covering essential plant management and care tracking without unnecessary bloat.

Completeness4/5

The tool set covers the full plant lifecycle: create, read, update, delete, list, plus care logging and querying. Minor gaps like the ability to edit or delete individual log entries exist, but they do not hinder core workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for MealMastery AI meal planning that enables users to manage meal plans, recipes, and grocery lists through natural language conversation with AI agents like Claude.
    52
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    MCP server for HortusFox self-hosted plant management system, exposing 38 tools to manage plants, locations, tasks, inventory, calendar, chat, and backups via natural language.
    38
    13
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for the Crown Town Compost customer portal that lets you check pickups, invoices, and upcoming collections, skip services, report missed pickups, and update account details through natural language.
    11
    237
    MIT