Skip to main content
Glama
jonmmease
by jonmmease

Server Quality Checklist

67%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v1.0.0

  • Disambiguation4/5

    Most tools have distinct purposes, but there is some overlap between get_conversation_messages and get_recent_messages, as both retrieve messages with similar parameters. The hello_world tool also stands out as a trivial example that doesn't align with the iMessage domain, potentially causing confusion. However, the majority of tools are well-differentiated by their specific functions.

    Naming Consistency4/5

    Tool names follow a consistent verb_noun pattern (e.g., get_conversation_messages, search_contacts, rebuild_search_index), with only one minor deviation: check_permissions uses a verb_noun format but is slightly less descriptive. Overall, the naming is predictable and enhances usability, though not perfect.

    Tool Count5/5

    With 13 tools, the server is well-scoped for managing iMessage data, covering permissions, conversations, messages, contacts, search, and sending. Each tool serves a clear purpose, and the count is neither too sparse nor overwhelming, fitting typical use cases effectively.

    Completeness4/5

    The toolset provides comprehensive coverage for reading, searching, and sending iMessages, with robust features like permissions checks and index management. However, there are minor gaps, such as no tools for deleting messages or managing conversations (e.g., creating new chats), which could limit full lifecycle operations but are not critical for core functionality.

  • Average 4.2/5 across 13 of 13 tools scored. Lowest: 3.5/5.

    See the Tool Scores section below for per-tool breakdowns.

    • No community issues in the last 6 months
    • 0 commits in the last 12 weeks
    • No stable releases found
    • No critical vulnerability alerts
    • No high-severity vulnerability alerts
    • No code scanning findings
    • CI status not available
  • This repository is licensed under MIT License.

  • This repository includes a README.md file.

  • No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.

    Tip: use the "Try in Browser" feature on the server page to seed initial usage.

  • Add a glama.json file to provide metadata about your server.

  • If you are the author, simply .

    If the server belongs to an organization, first add glama.json to the root of your repository:

    {
      "$schema": "https://glama.ai/mcp/schemas/server.json",
      "maintainers": [
        "your-github-username"
      ]
    }

    Then . Browse examples.

  • Add related servers to improve discoverability.

How to sync the server with GitHub?

Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.

To manually sync the server, click the "Sync Server" button in the MCP server admin interface.

How is the quality score calculated?

The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).

Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.

Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).

Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.

Tool Scores

  • Behavior2/5

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

    With no annotations provided, the description carries full burden. It mentions the return format ('Dictionary with messages list and pagination metadata'), which is helpful, but doesn't disclose critical behavioral traits like whether this is a read-only operation, rate limits, authentication requirements, or what 'most recent' means in terms of sorting. For a tool with 3 parameters and no annotations, this leaves significant gaps.

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

    Conciseness5/5

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

    The description is well-structured and front-loaded with the core purpose, followed by clear sections for Args and Returns. Every sentence earns its place, with no wasted words, making it efficient and easy to parse.

    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 moderate complexity (3 parameters, no annotations, but with an output schema), the description is reasonably complete. It covers the purpose, parameters, and return structure, and the output schema handles return values. However, it lacks details on behavioral aspects like sorting order or error handling, which could be important for full context.

    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 description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains each parameter's purpose: 'limit' for maximum returns, 'offset' for skipping messages, and 'after_date' for filtering by date with format specified (ISO8601). This compensates well for the schema's lack of descriptions, though it doesn't detail constraints like valid ranges.

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

    Purpose4/5

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

    The description clearly states the verb ('Get') and resource ('most recent messages across all conversations'), making the purpose immediately understandable. It distinguishes from siblings like 'get_conversation_messages' (which focuses on specific conversations) and 'search_messages' (which likely involves filtering/searching). However, it doesn't explicitly mention these distinctions, keeping it at 4 rather than 5.

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

    Usage Guidelines3/5

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

    The description implies usage for retrieving recent messages broadly, but doesn't explicitly state when to use this vs. alternatives like 'get_conversation_messages' (for specific conversations) or 'search_messages' (for filtered searches). It provides basic context but lacks explicit guidance on exclusions or preferred scenarios.

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

  • Behavior3/5

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

    No annotations are provided, so the description carries the full burden. It states the tool returns a greeting, implying it's a read-only operation, but doesn't explicitly mention side effects, permissions, or rate limits. The description adds basic behavioral context (e.g., it's an example tool), but lacks details on error handling or performance characteristics. This is adequate for a simple tool but minimal.

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

    Conciseness3/5

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

    The description is front-loaded with the core purpose but includes meta-commentary about FastMCP that doesn't aid tool selection. The Args and Returns sections are structured but could be more integrated. Overall, it's reasonably concise but has some extraneous information (e.g., the example tool note), reducing efficiency.

    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 complexity (one optional parameter) and the presence of an output schema (implied by 'Returns' in description), the description is mostly complete. It covers purpose, parameters, and return values adequately. However, it lacks usage context or error information, which is a minor gap for such a simple tool.

    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?

    The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains the 'name' parameter as 'The name to greet. Defaults to "World".' This clarifies the parameter's purpose and default value, fully compensating for the schema's lack of descriptions. For a single parameter tool, this provides complete semantic understanding.

    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 purpose: 'Return a friendly greeting.' It specifies the verb ('return') and resource ('greeting'), though it doesn't differentiate from siblings since this is a simple example tool with unrelated functionality to other tools on the server. The purpose is specific and unambiguous.

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

    Usage Guidelines2/5

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

    The description provides no guidance on when to use this tool versus alternatives. It mentions it's 'an example tool that demonstrates the basic pattern for creating MCP tools with FastMCP,' but this is meta-commentary rather than usage guidance. There's no indication of practical application contexts or when it might be preferred over other greeting-related tools (though none exist in siblings).

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

  • 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 describes the return format (sorted by most recent message, includes specific metadata) and mentions pagination via limit/offset, which adds useful context. However, it lacks details on permissions, rate limits, or error handling, which are important for a list operation. The description does not contradict any annotations, as none are given.

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

    Conciseness5/5

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

    The description is well-structured and concise, with no wasted words. It front-loads the purpose, lists metadata details in bullet points for clarity, and separately documents args and returns. Each sentence adds value, making it easy to scan and understand quickly.

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

    Completeness4/5

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

    Given the tool's moderate complexity (list operation with pagination), no annotations, and an output schema exists (implied by 'Returns'), the description is fairly complete. It covers purpose, parameters, and return structure adequately. However, it could improve by addressing behavioral aspects like permissions or error cases, but the output schema reduces the need to explain return values in detail.

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

    Parameters4/5

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

    The input schema has 0% description coverage, so the description must compensate. It explicitly documents both parameters ('limit' and 'offset') with their purposes and default values, adding clear meaning beyond the schema. This fully compensates for the schema's lack of descriptions, though it does not provide additional semantic nuances like constraints or examples.

    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 purpose: 'List all conversations with metadata.' It specifies the verb ('List') and resource ('conversations'), and details the metadata included (participant info, contact names, message count, etc.). However, it does not explicitly differentiate from sibling tools like 'get_recent_messages' or 'search_messages', which might have overlapping functions, so it misses full sibling distinction.

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

    Usage Guidelines2/5

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

    The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools such as 'get_recent_messages' for recent messages or 'search_messages' for filtered searches, nor does it specify prerequisites or contexts for usage. This lack of comparative guidance leaves the agent without clear direction on tool selection.

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

  • Behavior3/5

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

    No annotations are provided, so the description carries the full burden. It discloses that the tool returns a dictionary with progress information or a status if no rebuild is in progress, which adds useful behavioral context. However, it doesn't cover aspects like error handling, rate limits, or authentication needs, leaving some gaps in transparency.

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

    Conciseness5/5

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

    The description is highly concise and well-structured, consisting of two sentences that efficiently convey the purpose and return value. Every sentence earns its place by providing essential information without waste, making it easy to parse and understand.

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

    Completeness4/5

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

    Given the tool's complexity (simple read operation with 0 parameters) and the presence of an output schema (which handles return value documentation), the description is reasonably complete. It covers the core purpose and behavioral output, though it could benefit from more context on usage relative to siblings. No annotations exist to fill gaps, but the output schema reduces the need for extensive description.

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

    Parameters4/5

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

    The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, but since there are no parameters, this is acceptable. A baseline of 4 is appropriate as it doesn't introduce confusion or redundancy.

    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 purpose: 'Get the current progress of a background index rebuild.' It specifies the verb ('Get') and resource ('progress of a background index rebuild'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'rebuild_search_index' or 'search_index_status', which prevents a score of 5.

    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 by mentioning 'background index rebuild,' suggesting it should be used when monitoring such operations. However, it lacks explicit guidance on when to use this tool versus alternatives like 'rebuild_search_index' (which might initiate a rebuild) or 'search_index_status' (which could provide general status). No exclusions or clear alternatives are stated.

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

  • 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 adds useful context beyond basic functionality: it explains that messages are 'enriched with contact names for senders,' describes how contact normalization works, and mentions default values for limit and offset. However, it doesn't cover important aspects like error handling, rate limits, authentication needs, or whether this is a read-only operation, which are significant gaps for a tool with no annotations.

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

    Conciseness4/5

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

    The description is well-structured and appropriately sized: it starts with a clear purpose statement, followed by usage details, an 'Args' section with parameter explanations, and a 'Returns' section. Every sentence adds value, such as clarifying contact normalization and referencing sibling tools. However, it could be slightly more concise by integrating the parameter details more seamlessly, and the structure, while clear, isn't perfectly front-loaded with the most critical information.

    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 complexity (a 4-parameter tool with no annotations but an output schema), the description is mostly complete. It covers the purpose, parameter semantics, and return value structure ('Dictionary with messages list, conversation info, and pagination'), which aligns with the output schema. The main gap is the lack of behavioral details like error handling or permissions, but the output schema reduces the need to explain return values, so it's reasonably comprehensive for the context.

    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?

    The schema description coverage is 0%, so the description must fully compensate. It successfully adds detailed meaning for all four parameters: it explains that 'chat_id' is a 'Database row ID of the chat (from list_conversations),' 'contact' is a 'Phone number or email to find the conversation' that gets normalized, and 'limit' and 'offset' control pagination with defaults. This provides clear semantics beyond what the bare schema offers, making it easy for an agent to understand how to use each parameter correctly.

    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 purpose: 'Get messages from a specific conversation.' It specifies the verb ('Get') and resource ('messages from a specific conversation'), making the intent unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'get_recent_messages' or 'search_messages', which could provide similar functionality, so it doesn't reach the highest score.

    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 provides some implied usage guidance by explaining that you can specify a conversation by 'chat_id or contact identifier' and mentioning that 'contact is normalized and used to find the chat.' It also references 'list_conversations' as a source for chat_id. However, it lacks explicit when-to-use rules, such as when to prefer this tool over 'get_recent_messages' or 'search_messages', and doesn't mention any prerequisites or exclusions, leaving room for ambiguity.

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

  • 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 describes the search functionality, partial matching support, and return format, but doesn't mention performance characteristics, rate limits, authentication requirements, or error conditions. The behavioral information is adequate but not comprehensive.

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

    Conciseness5/5

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

    The description is well-structured and front-loaded with the core purpose, followed by parameter details and return format. Every sentence adds value with no redundancy. The bullet-point formatting for Args and Returns enhances readability without unnecessary verbosity.

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

    Completeness5/5

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

    Given the tool's moderate complexity (search with two parameters), no annotations, and the presence of an output schema (which covers return values), the description is complete enough. It explains what the tool does, how to use it, parameter semantics, and references the return structure without duplicating output schema details.

    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 0% description coverage, so the description must compensate. It provides clear semantic meaning for both parameters: 'query' is explained as phone number or email with partial matching, and 'limit' is explained as maximum results with default value. This adds significant value beyond the bare schema, though it doesn't cover edge cases like query formatting.

    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 searches for contacts/handles in the iMessage database using phone numbers or email addresses, distinguishing it from sibling tools like search_messages (which searches message content) and lookup_contact (which appears to be a different lookup mechanism). The verb 'search' and resource 'contacts/handles' are specific and unambiguous.

    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 clear context for when to use this tool (searching by phone number or email address with partial matching), but it doesn't explicitly state when not to use it or mention alternatives like lookup_contact. The context is sufficient for basic usage but lacks comparative guidance against siblings.

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

  • Behavior4/5

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

    With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns (status information and metadata in a dictionary format) and lists specific data points included. It doesn't mention performance characteristics, error conditions, or authentication requirements, but provides substantial behavioral context for a read-only status 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 perfectly structured: a clear purpose statement followed by a bulleted list of returned information and a summary of the return format. Every sentence earns its place, with no redundant information. The bulleted list makes the information easily scannable.

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

    Completeness5/5

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

    Given the tool's simplicity (0 parameters, read-only status check), the presence of an output schema, and the detailed description of what information is returned, the description is complete. It provides all necessary context for an agent to understand when and how to use this tool effectively without being overly verbose.

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

    Parameters4/5

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

    The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the return value semantics.

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

    Purpose5/5

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

    The description clearly states the tool's purpose with a specific verb ('Get') and resource ('current status of the search index'), distinguishing it from siblings like 'get_rebuild_progress' (which tracks progress) and 'rebuild_search_index' (which performs an action). The description explicitly identifies what information is returned about the search index.

    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 by listing the specific status information returned, suggesting it's for monitoring the search index. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_rebuild_progress' (for rebuild status) or provide any exclusions or prerequisites for usage.

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

  • Behavior4/5

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

    With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior by specifying what it checks (permissions for specific paths) and what it returns (a dictionary with access status, paths checked, error messages, and macOS version). However, it lacks details on potential side effects, error handling, or performance characteristics like execution time.

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

    Conciseness5/5

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

    The description is well-structured and front-loaded with the main purpose in the first sentence, followed by bullet points for clarity and a returns section. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

    Completeness5/5

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

    Given the tool's complexity (simple permission check with no parameters), the presence of an output schema (which handles return values), and the detailed description covering purpose, usage, and behavior, the description is complete enough. It provides all necessary context for an AI agent to understand and invoke the tool correctly.

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

    Parameters4/5

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

    The tool has 0 parameters, and the schema description coverage is 100%, so no parameter documentation is needed. The description does not add parameter-specific information, but this is appropriate given the lack of inputs. A baseline of 4 is assigned as it compensates adequately for the zero-parameter case.

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

    Purpose5/5

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

    The description clearly states the tool's purpose with specific verbs ('check if the server has the required permissions') and resources ('iMessage data', 'Full Disk Access for ~/Library/Messages/chat.db', 'Access to ~/Library/Messages/Attachments'). It distinguishes itself from sibling tools (e.g., get_conversation_messages, send_message) by focusing on permission debugging rather than data retrieval or message operations.

    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 clear context for when to use this tool ('helps debug permission issues'), but it does not explicitly state when not to use it or name specific alternatives among the sibling tools. It implies usage for troubleshooting access problems without detailing prerequisites or exclusions.

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

  • Behavior4/5

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

    With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it returns contact information or None if not found, explicitly resolves from macOS Contacts app, and includes error handling for access issues. It could improve by mentioning rate limits or permissions needed beyond access availability.

    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 front-loaded with the core purpose, followed by concise details on behavior, parameters, and returns. Every sentence adds value with no redundancy, and it uses bullet points for clarity without unnecessary length.

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

    Completeness5/5

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

    Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (implied by the Returns section), the description is complete. It covers purpose, usage, behavior, parameters, and return values adequately, leaving no significant gaps for the agent.

    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?

    The schema has 0% description coverage, so the description fully compensates by explaining the single parameter 'phone_or_email' as 'The phone number or email address to look up.' This adds clear meaning beyond the bare schema, making the parameter's purpose and format evident.

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

    Purpose5/5

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

    The description clearly states the tool's purpose: 'Look up a contact by phone number or email address' with the specific verb 'look up' and resource 'contact'. It distinguishes itself from sibling tools like 'search_contacts' by focusing on exact lookup via identifier rather than broader search.

    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 clear context for when to use this tool: to resolve contacts from the macOS Contacts app using a phone number or email. However, it does not explicitly state when not to use it or name alternatives like 'search_contacts' for broader searches, though the distinction is implied.

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

  • Behavior5/5

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

    With no annotations provided, the description carries full burden and excels by detailing graceful failure handling (partial failures, fallbacks, error returns), search mode behaviors, and response structure. It provides rich behavioral context beyond basic functionality.

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

    Conciseness4/5

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

    Well-structured with clear sections (overview, behavioral notes, parameters, returns) but somewhat lengthy. Most sentences earn their place by providing essential technical details, though some parameter explanations could be more concise.

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

    Completeness5/5

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

    Given the tool's complexity (10 parameters, sophisticated search logic, graceful failure handling) and the presence of an output schema, the description is remarkably complete. It covers purpose, behavior, parameters, returns, and failure modes thoroughly.

    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?

    With 0% schema description coverage for 10 parameters, the description fully compensates by explaining each parameter's purpose, format constraints (ISO8601, exact match after normalization), default values, and allowed values for search_mode. It adds substantial meaning beyond the bare schema.

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

    Purpose5/5

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

    The description clearly states the tool searches messages using hybrid keyword + semantic search, specifying the technical approach (FTS5 + OpenAI embeddings + RRF). It distinguishes from siblings like get_conversation_messages and get_recent_messages by emphasizing search capabilities rather than direct retrieval.

    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 clear context about when to use this tool (for searching messages with flexible filtering and search modes) but doesn't explicitly mention when not to use it or name specific alternatives among siblings. It implies usage for search vs. direct retrieval tools.

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

  • Behavior4/5

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

    With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it returns messages 'ordered chronologically' with the target 'marked', specifies the return structure, and implies it's a read-only operation (no destructive language). However, it doesn't mention permissions, rate limits, or error conditions, leaving some gaps.

    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 front-loaded with the core purpose, followed by usage guidelines, then parameter details, and finally return values. Every sentence earns its place with no redundancy, making it efficient and well-structured for quick comprehension.

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

    Completeness5/5

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

    Given the tool's moderate complexity (3 parameters, 1 required), no annotations, and the presence of an output schema (implied by the 'Returns' section), the description is complete. It covers purpose, usage, parameters, and return structure, leaving no significant gaps for an agent to operate effectively.

    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 fully documents all three parameters: 'rowid' as 'The rowid of the message to get context for', 'before' as 'Number of messages to fetch before the target', and 'after' as 'Number of messages to fetch after the target', including default values. This adds complete meaning beyond the bare schema.

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

    Purpose5/5

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

    The description clearly states the specific action ('Get messages surrounding a specific message') and resource ('in the same conversation'), distinguishing it from siblings like 'get_conversation_messages' (which likely gets all messages) and 'search_messages' (which searches across conversations). The phrase 'surrounding a specific message' precisely defines the scope.

    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 states when to use this tool: 'Use this to get context around a message found via search.' This directly contrasts with 'search_messages' (for finding messages) and 'get_conversation_messages' (for getting all messages in a conversation), providing clear alternative guidance.

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

  • Behavior4/5

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

    With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the destructive nature ('clear the existing search index'), the data source ('re-index all messages from chat.db'), and side effects ('update sync metadata'). It also explains the blocking vs. background execution modes. However, it lacks details on permissions, rate limits, or error handling, which are relevant for a destructive operation.

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

    Conciseness5/5

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

    The description is well-structured and front-loaded with the core purpose. Each sentence earns its place: the initial statement, the three-step breakdown, the exclusion note, and the parameter/return explanations. It avoids redundancy and 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.

    Completeness5/5

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

    Given the tool's complexity (destructive rebuild operation), no annotations, and the presence of an output schema, the description is highly complete. It covers the purpose, process, exclusions, parameter behavior, and return value context. The output schema handles return details, so the description doesn't need to explain return values further, making it well-rounded for the agent's needs.

    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?

    The schema description coverage is 0%, so the description must fully compensate. It does this excellently by documenting the single parameter 'background' with clear semantics: explaining the two modes (True for background thread with immediate return, False for blocking until complete) and linking it to progress tracking. This adds significant value beyond the bare schema.

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

    Purpose5/5

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

    The description clearly states the specific action ('rebuild the entire search index from scratch') and distinguishes it from sibling tools by explicitly mentioning what it does NOT do ('does NOT generate embeddings'). It provides a three-step breakdown of the process, making the purpose unambiguous and distinct from other search-related tools.

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

    Usage Guidelines5/5

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

    The description explicitly provides when-not-to-use guidance ('does NOT generate embeddings. Use a separate tool for that') and implicitly suggests alternatives for related tasks (e.g., use other tools for embedding generation or checking progress). It also clarifies the tool's scope relative to siblings like 'search_index_status' or 'get_rebuild_progress' by detailing its destructive rebuild process.

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

  • Behavior5/5

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

    Since no annotations are provided, the description carries the full burden of behavioral disclosure. It thoroughly documents critical behavioral traits: the limitation to existing conversations, lack of delivery confirmation, dependency on Messages.app running, and Automation permission requirement. This goes beyond what the input schema provides and addresses potential 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.

    Conciseness4/5

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

    The description is well-structured with clear sections (purpose, limitations, args, returns) and front-loads the core functionality. While comprehensive, it could be slightly more concise by integrating the 'Args' and 'Returns' sections more seamlessly, but every sentence adds value.

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

    Completeness5/5

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

    Given the tool's complexity (sending messages with dependencies and limitations), no annotations, and an output schema that documents return values, the description is complete. It covers purpose, usage constraints, parameters, and behavioral expectations, leaving no significant gaps for the agent.

    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?

    With 0% schema description coverage, the description fully compensates by explaining all three parameters: 'recipient' (phone number or email address), 'message' (text to send), and 'service' (iMessage or SMS with default). It adds meaningful context about parameter usage that isn't in the bare schema.

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

    Purpose5/5

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

    The description clearly states the tool's purpose with specific verb ('Send a message') and resource ('to an existing conversation via AppleScript'), distinguishing it from sibling tools like 'list_conversations' or 'get_conversation_messages' which are read-only. It specifies the exact mechanism (AppleScript) and target (existing conversations).

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

    Usage Guidelines5/5

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

    The description provides explicit usage guidelines in the 'IMPORTANT LIMITATIONS' section, detailing when to use (for existing conversations) and when not to use (no delivery confirmation, requires Messages.app running and Automation permission). It distinguishes this tool from alternatives by specifying it's for sending messages, not retrieving or managing them like sibling tools.

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

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues.
  • Evaluate tool definition quality.

Our badge communicates server capabilities, safety, and installation instructions.

Card Badge

jons-mcp-imessage MCP server

Copy to your README.md:

Score Badge

jons-mcp-imessage MCP server

Copy to your README.md:

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jonmmease/jons-mcp-imessage'

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