Skip to main content
Glama
jfk9w

xmpp-mcp

by jfk9w

Server Quality Checklist

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

  • Disambiguation5/5

    Each tool targets a distinct action: status check, send, set chat state, poll, and wait. Poll and wait are differentiated by blocking behavior, so there is no ambiguity.

    Naming Consistency4/5

    All tools share an xmpp_ prefix and mostly follow a verb_noun pattern (send_message, set_chat_state, poll_messages, wait_for_message). The one exception is xmpp_status, which is a noun phrase rather than a verb_noun, a minor deviation.

    Tool Count5/5

    With 5 tools, the server is well-scoped for its focused purpose of interacting with a single XMPP connection. Each tool earns its place, and the count is within the ideal 3-15 range.

    Completeness5/5

    The tool set covers the essential lifecycle for an XMPP connection: check status, send messages, publish chat state, and retrieve messages via poll or wait. No obvious gaps exist for the stated domain of a restricted single-recipient XMPP connection.

  • Average 4.1/5 across 5 of 5 tools scored.

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

    • No community issues in the last 6 months
    • 4 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?

    No annotations are provided, and the description does not disclose any behavioral details such as authentication requirements, side effects, or what 'restricted' entails. It simply states the action without additional 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, concise sentence with no unnecessary words. It is front-loaded and easy to parse.

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

    Completeness4/5

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

    The output schema is present, so return values are covered elsewhere. The description adequately states the tool's purpose for a zero-parameter status check, though it could elaborate on the meaning of 'restricted' to be fully 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 tool has zero parameters, so the description does not need to explain parameter semantics. The baseline of 4 applies because the schema is empty and there is nothing to document.

    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 'check' and identifies two resources: the restricted XMPP connection and the durable message cursor. This clearly distinguishes from sibling tools that send messages, set state, poll, or wait.

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

    Usage Guidelines2/5

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

    No explicit guidance is provided on when to use this tool versus alternatives. The description does not mention sibling tools or suggest usage scenarios, leaving the agent to infer from the name and context.

    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 full responsibility for disclosing behavior. It explicitly states 'Read' (non-destructive) and 'without blocking' (non-blocking execution), and hints at cursor persistence ('durable cursor'). This covers the essential safety and execution profile, though deeper details (e.g., whether the cursor auto-advances, error conditions) are not disclosed.

    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, front-loaded sentence. Every word earns its place: 'Read' (verb), 'allowlisted messages' (object), 'after a durable cursor' (mechanism), and 'without blocking' (behavior). There is zero fluff or redundancy, making it an excellent model of concise writing.

    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 output schema exists, so return values are not the description's responsibility. However, given the moderate complexity of a cursor-based polling tool, the description misses key context: what 'allowlisted' means, how the cursor should be managed, and what `request_id` is for. These gaps make it minimally viable but not fully complete.

    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 for parameter meaning. It effectively explains `after_cursor` via 'after a durable cursor' but provides no insight into `limit` or `request_id`. `request_id` in particular is cryptic and remains unexplained, leaving two of three parameters semantically underdefined.

    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 ('Read'), identifies the resource ('allowlisted messages'), and adds crucial modifiers ('after a durable cursor', 'without blocking') that clearly distinguish it from sibling tools like `xmpp_wait_for_message` (blocking) and `xmpp_send_message` (sending). This precisely conveys the tool's function and scope.

    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 phrase 'without blocking' provides clear context that this tool is intended for non-blocking message retrieval, implicitly contrasting with `xmpp_wait_for_message`. It does not explicitly name alternatives or define exclusion criteria, but the context is strong enough that an agent would know when to choose this over a blocking wait.

    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?

    No annotations are provided, so the description carries the full burden. It adds meaningful behavioral context by disclosing that timeout_seconds is clamped to 1..1800 seconds and that a timeout is a normal result, which prepares the agent for possible empty or null returns. It does not cover all behaviors (e.g., whether it consumes the message), but it provides substantial useful detail.

    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 primary purpose in the first sentence, followed by a single second sentence that adds a critical behavioral note. It is concise with no redundant words or restatement of schema fields, earning top marks.

    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 and the presence of an output schema, the description adequately covers the essential behavior (blocking wait, timeout clamping, normal timeout). It leaves some domain context implicit (e.g., what 'allowlisted' means, how to get a cursor), but this is acceptable given sibling tools and schema. Minor gaps prevent a perfect score.

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

    Parameters3/5

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

    Schema description coverage is 0%, so the description must compensate. It clarifies 'after_cursor' by referencing 'after a durable cursor' and explains the clamping behavior of 'timeout_seconds'. However, it does not describe 'request_id' at all, and the schema only provides names/types without descriptions. The partial coverage is helpful but not complete.

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

    Purpose5/5

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

    The description states a specific verb ('Wait for') and a precise resource ('next allowlisted message'), along with a positional constraint ('after a durable cursor'). This clearly distinguishes it from the sibling polling tool 'xmpp_poll_messages' by implying a blocking wait rather than a poll.

    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 blocking waits (as opposed to polling) and notes that a timeout is a normal outcome, but it does not explicitly compare with alternatives like xmpp_poll_messages or state prerequisites (e.g., how to obtain a durable cursor). Guidance is implied rather than explicit.

    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 important constraints (allowlisted JID, fixed recipient, request_id condition) but omits operational details such as error handling, idempotency, or connection requirements. The term 'Publish' implies a side effect, but the description does not elaborate on what the agent should expect.

    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 concise sentences with the purpose front-loaded. Every sentence adds value: purpose, allowed state values, and request_id guidance. There is no wasted text.

    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 2-parameter tool with an output schema, the description covers purpose, constraints, and parameter semantics. It lacks a few edge-case details (e.g., error behavior, exact output), but the output schema likely fills that gap. The description is sufficient for an agent to select and invoke the tool correctly in most cases.

    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%, and the schema has no enums or descriptions. The description compensates fully by enumerating valid state values ('active, composing, paused, inactive, or gone') and explaining when to pass request_id ('when the peer preserves XMPP threads'). This adds essential meaning beyond the raw 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 action: 'Publish an XEP-0085 chat state to the single allowlisted JID.' This is a specific verb and resource, and it distinguishes the tool from sibling tools like xmpp_send_message and xmpp_poll_messages by focusing on chat state publication.

    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 gives clear context: the recipient is allowlisted and cannot be overridden, and request_id should be passed when the peer preserves XMPP threads. However, it does not explicitly state when to use this tool versus alternatives, or provide exclusions, so it stops short of a 5.

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

  • Behavior4/5

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

    With no annotations, the description carries the burden of behavioral disclosure. It reveals a key restriction (recipient cannot be overridden) and explains the request_id correlation mechanism, adding context beyond the schema. However, it does not mention side effects, error behavior, or delivery semantics.

    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 primary action, and immediately provides a necessary constraint and a valuable usage tip. Every word earns its place without redundancy or fluff.

    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 send operation with an output schema, the description covers the core action, the fixed recipient restriction, and request_id usage. It lacks authentication or error-handling context, but the output schema likely documents return values, and sibling tools provide workflow 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?

    Schema description coverage is 0%, but the description compensates by clarifying the text parameter as the message content through 'Send text' and explaining request_id's purpose for response correlation. It does not specify formatting constraints for text, but the meaning is strongly implied.

    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 explicitly states 'Send text to the single configured allowlisted JID,' providing a clear verb, object, and target. It distinguishes itself from sibling tools (polling, status, chat state) by focusing on the sending action and highlights the fixed recipient constraint.

    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 clearly implies the tool is for sending outgoing messages, which is distinct from the sibling polling and waiting tools, but it does not explicitly state when to use it over alternatives. It provides specific guidance for request_id ('Reuse request_id to correlate a response'), though it lacks when-not-to-use exclusions.

    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

xmpp-mcp MCP server

Copy to your README.md:

Score Badge

xmpp-mcp 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/jfk9w/xmpp-mcp'

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