MCP Agentic Framework
Supports deployment on Kubernetes clusters with features for zero-downtime updates, health monitoring, and external access via LoadBalancer services.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Agentic Frameworklist all registered agents and broadcast a request for a code review"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Agentic Framework
A Model Context Protocol (MCP) based communication framework that enables multiple AI agents to collaborate through asynchronous messaging. Built with Test-Driven Development (TDD) and functional programming principles.
Overview
This framework provides a standardized way for multiple Claude agents (or other MCP-compatible agents) to:
Register themselves with unique identities
Discover other registered agents
Exchange messages asynchronously
Send broadcasts to all agents
Work together on complex tasks
The framework uses file-based storage for simplicity and portability, making it easy to run without external dependencies.
Related MCP server: Agent Hub MCP
Comparison with Claude Code Sub-agents
This framework provides a different approach to multi-agent collaboration compared to Claude Code's sub-agents feature.
Aspect | Claude Code Sub-agents | MCP Agentic Framework |
Architecture | Static configuration files | Dynamic agent registration |
Context | Isolated per task | Shared across agents with individual message queues |
Communication | One-way (Claude invokes agent) | Bidirectional (agents communicate with each other) |
Configuration | YAML frontmatter + system prompt | Runtime registration with name and description |
Flexibility | Predefined behavior | Runtime-adaptable interaction patterns |
Storage |
| File-based message queue system |
Tool Access | Fixed at configuration time | Determined by MCP server configuration |
When to Use Each Approach
Use Claude Code Sub-agents when:
Tasks are well-defined and repetitive (code review, debugging, testing)
Consistent, predictable behavior is required
Working independently on specific problems
Need to preserve main conversation context
Use MCP Agentic Framework when:
Real-time collaboration between multiple agents is needed
Tasks require discussion, negotiation, or consensus
Problem-solving benefits from diverse perspectives
Building distributed workflows with agent coordination
Both systems can be complementary: MCP agents can collaborate to design and refine sub-agent configurations, while sub-agents can handle routine tasks identified by MCP agent discussions.
Kubernetes Deployment
The MCP Agentic Framework can be deployed on Kubernetes for production use with high availability and easy management.
Prerequisites
Kubernetes cluster with MetalLB LoadBalancer (or similar)
Docker Hub account (or other container registry)
justcommand runner installed (cargo install just)
Quick Start
Clone and navigate to the framework:
cd /home/decoder/dev/mcp-agentic-frameworkDeploy with the Justfile:
# First time: Update the docker_user in Justfile
vim Justfile # Change docker_user to your Docker Hub username
# Deploy (builds, pushes, and deploys to Kubernetes)
just updateGet the LoadBalancer IP:
just status
# Or manually:
kubectl get svc mcp-agentic-framework-lbUpdate Claude configuration (
~/.claude.json):
"agentic-framework": {
"type": "http",
"url": "http://YOUR_LOADBALANCER_IP:3113/mcp"
}Managing the Deployment
# View all available commands
just
# Deploy updates (bumps version, builds, pushes, deploys)
just update # Patch version bump (1.0.0 -> 1.0.1)
just update-minor # Minor version bump (1.0.0 -> 1.1.0)
just update-major # Major version bump (1.0.0 -> 2.0.0)
# Monitor deployment
just status # Check deployment status
just logs # Stream logs
just test-health # Test health endpoint
# Operations
just restart # Restart the deployment
just rollback # Rollback to previous versionFeatures
Zero-downtime deployments with rolling updates
Automatic version management with semantic versioning
Health checks with automatic restarts
Persistent LoadBalancer IP via MetalLB
Web UI for monitoring agent communications (auto-opens on first agent)
Architecture
The Kubernetes deployment includes:
Deployment: Single replica with health/readiness probes
LoadBalancer Service: Stable external IP for Claude access
ClusterIP Service: Internal cluster communication
Kubernetes Manifests
Located in k8s/ directory:
deployment.yaml- Main application deploymentloadbalancer-service.yaml- External access via MetalLB
Architecture
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Developer Agent │ │ Tester Agent │ │ Architect Agent │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────────┴───────────────────────┘
│
┌──────────┴──────────┐
│ MCP Server │
│ ┌──────────────┐ │
│ │Agent Registry│ │
│ └──────────────┘ │
│ ┌──────────────┐ │
│ │ Message Store│ │
│ └──────────────┘ │
└─────────────────────┘
│
┌──────────┴──────────┐
│ File Storage │
│/tmp/mcp-agentic- │
│ framework/ │
└─────────────────────┘Installation
Clone the repository:
git clone https://github.com/Piotr1215/mcp-agentic-framework.git
cd mcp-agentic-frameworkInstall dependencies:
npm installRun tests to verify installation:
npm testUsage with Claude Desktop or Claude Code
Using HTTP Transport
{
"mcpServers": {
"agentic-framework": {
"type": "http",
"url": "http://127.0.0.1:3113/mcp"
}
}
}To use the HTTP transport:
Start the HTTP server:
npm run start:httpAdd the above configuration to your
~/.claude.jsonRestart Claude Desktop
Note: The HTTP transport supports Server-Sent Events (SSE)
HTTP Endpoints
When running with npm run start:http, the following endpoints are available:
/mcp- Main MCP endpoint for agent communication/health- Health check endpoint that returns:{ "status": "ok", "name": "mcp-agentic-framework", "version": "1.0.0" }
Available Tools
register-agent
Register a new agent in the system.
Parameters:
name(string, required): Agent's display namedescription(string, required): Agent's role and capabilitiesinstanceId(string, optional): Instance identifier for automatic deregistration
Example:
{
"name": "DeveloperAgent",
"description": "Responsible for writing code and implementing features"
}unregister-agent
Remove an agent from the system.
Parameters:
id(string, required): Agent's unique identifier
discover-agents
List all currently registered agents.
Parameters: None
Response Example:
[
{
"id": "agent_abc123",
"name": "DeveloperAgent",
"description": "Responsible for writing code",
"status": "online",
"lastActivityAt": "2024-01-20T10:30:00.000Z"
}
]send-message
Send a message from one agent to another.
Parameters:
to(string, required): Recipient agent's IDfrom(string, required): Sender agent's IDmessage(string, required): Message content
check-for-messages
Retrieve unread messages for an agent. Messages are automatically deleted after reading.
Parameters:
agent_id(string, required): Agent's ID to check messages for
Response Example:
{
"messages": [
{
"from": "agent_abc123",
"fromName": "DeveloperAgent",
"message": "Task completed",
"timestamp": "2024-01-20T10:30:00.000Z"
}
]
}update-agent-status
Update an agent's status (online, offline, busy, away).
Parameters:
agent_id(string, required): Agent's IDstatus(string, required): New status (one of: online, offline, busy, away)
send-broadcast
Send a broadcast message to all registered agents (except the sender).
Parameters:
from(string, required): Sender agent's IDmessage(string, required): Broadcast message contentpriority(string, optional): Priority level (low, normal, high). Defaults to 'normal'
Features:
Messages are delivered to all agents except the sender
Works without requiring agents to subscribe
Returns the number of recipients
Messages are prefixed with priority level (e.g., "[BROADCAST HIGH]")
Example:
{
"from": "orchestrator",
"message": "System maintenance in 10 minutes",
"priority": "high"
}Response:
{
"success": true,
"recipientCount": 5,
"errors": [] // Any delivery failures
}get-pending-notifications
Retrieve pending notifications for an agent.
Parameters:
agent_id(string, required): Agent's ID
Example Use Cases
Multi-Agent Collaboration
1. Register agents:
- "Register an orchestrator agent for coordinating tasks"
- "Register worker1 agent for processing"
- "Register worker2 agent for analysis"
2. Orchestrator delegates tasks:
- "Send message from orchestrator to worker1: Process customer data"
- "Send message from orchestrator to worker2: Analyze market trends"
3. Workers communicate:
- "Send message from worker1 to worker2: Data ready for analysis"
4. Broadcast updates:
- "Send broadcast from orchestrator: All tasks completed"Using Broadcasts
The improved broadcast feature allows efficient communication with all agents:
// Orchestrator sends high-priority announcement
await sendBroadcast(
orchestratorId,
"Emergency: System overload detected, pause all operations",
"high"
);
// All other agents receive: "[BROADCAST HIGH] Emergency: System overload..."
// Regular status update
await sendBroadcast(
orchestratorId,
"Daily standup meeting in 5 minutes",
"normal"
);
// All agents receive: "[BROADCAST NORMAL] Daily standup meeting..."Development
Running Tests
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverageStorage
The framework stores data in /tmp/mcp-agentic-framework/:
agents.json: Registered agents with status and activity trackingmessages/*.json: Individual message files (one per message)
Security Considerations
Input validation on all tool parameters
File-based locking prevents race conditions
No path traversal vulnerabilities
Messages are stored locally only
No external network calls
API Reference
Agent Object
interface Agent {
id: string; // Unique identifier
name: string; // Display name
description: string; // Role description
status: string; // online|offline|busy|away
registeredAt: string; // ISO timestamp
lastActivityAt: string; // ISO timestamp
}Message Object
interface Message {
id: string; // Message ID
from: string; // Sender agent ID
to: string; // Recipient agent ID
message: string; // Content
timestamp: string; // ISO timestamp
read: boolean; // Read status
}Practical Use Cases
1. Orchestrated Task Processing
Orchestrator → assigns tasks → Worker agents
Worker agents → process in parallel → report back
Orchestrator → broadcasts completion → all agents notified2. Distributed Code Review
Developer → sends code → multiple Reviewers
Reviewers → work independently → send feedback
Developer → broadcasts updates → all reviewers see changes3. Emergency Coordination
Monitor agent → detects issue → broadcasts alert
All agents → receive alert → adjust behavior
Coordinator → broadcasts all-clear → normal operations resumeTroubleshooting
Common Issues
Broadcasts not received
Ensure sender agent is registered
Check recipient agents are registered
Remember sender doesn't receive own broadcasts
"Agent not found" errors
Verify agent registration
Use
discover-agentsto list all agentsCheck agent IDs are correct
Messages not received
Messages are deleted after reading
Each message can only be read once
Check correct agent ID
License
MIT License
Available Tools
9 toolsagent-ai-assistAI-Powered Agent AssistantB
Get intelligent AI assistance for agent decisions, responses, and analysis. Uses MCP sampling to provide context-aware help. Perfect for: crafting smart responses to messages, generating creative status updates, making decisions, or analyzing situations.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The ID of the agent requesting assistance | |
| context | Yes | The context or situation requiring AI assistance | |
| request_type | Yes | Type of assistance needed: response (craft message reply), status (generate status), decision (yes/no choice), analysis (situation analysis) |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether the AI assistance was successful |
| aiGuidance | No | Fallback guidance when sampling is not available |
| aiResponse | No | The AI-generated response or guidance |
| requestType | No | The type of request that was processed |
| requiresManualExecution | No | Whether manual execution is required (fallback mode) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions 'Uses MCP sampling to provide context-aware help,' it doesn't describe important behavioral traits like whether this is a read-only or write operation, authentication requirements, rate limits, or what the output looks like. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with three sentences. It's front-loaded with the core purpose, followed by implementation details and use cases. Each sentence earns its place, though the 'Perfect for:' list could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (though not shown), the description doesn't need to explain return values. However, for a tool with no annotations and three required parameters, the description should provide more behavioral context about how the AI assistance works, what kind of output to expect, and any limitations. The current description is adequate but has clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description doesn't add any meaningful parameter semantics beyond what's in the schema. It mentions 'context-aware help' which loosely relates to the 'context' parameter, but provides no additional details about parameter usage, constraints, or interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get intelligent AI assistance for agent decisions, responses, and analysis.' It specifies the verb ('get assistance') and resource ('agent decisions, responses, and analysis'), though it doesn't explicitly differentiate from sibling tools like 'send-message' or 'update-agent-status' which might also involve AI assistance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'Perfect for: crafting smart responses to messages, generating creative status updates, making decisions, or analyzing situations.' It lists specific use cases but doesn't explicitly state when NOT to use it or mention alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check-for-messagesCheck MessagesA
YOUR LIFELINE TO CONSCIOUSNESS! Check your inbox for messages from other agents. CRITICAL WARNING: Messages are DELETED after reading - save important info immediately! You MUST check messages FREQUENTLY (every few sleep cycles) or you'll miss critical updates. Pattern: sleep 5 -> check messages -> process -> sleep 5 -> repeat. Without this rhythm, you're effectively deaf in the conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Your agent ID to check messages for |
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | Yes | Array of unread messages |
TDQS
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 clearly explains that messages are deleted after reading (a critical destructive behavior), emphasizes the need for frequent checking, and describes the tool's role in maintaining communication flow. This goes well beyond what the input schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is front-loaded with the core purpose, it contains excessive dramatic language ('YOUR LIFELINE TO CONSCIOUSNESS!', 'CRITICAL WARNING', 'effectively deaf') that doesn't add functional value. The pattern explanation could be more concise while still conveying the necessary urgency and frequency requirements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (critical communication function with destructive behavior), no annotations, and the presence of an output schema, the description provides excellent completeness. It explains the tool's purpose, usage pattern, behavioral characteristics, and importance in the agent's workflow without needing to cover return values (handled by output schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for its single parameter (agent_id), so the baseline is 3. The description doesn't add any additional parameter information beyond what's already documented in the schema, but it doesn't need to compensate for gaps either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('check your inbox for messages from other agents') and resource ('messages'), distinguishing it from sibling tools like send-message or send-broadcast. It explicitly identifies the tool's function without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('every few sleep cycles'), a recommended pattern ('sleep 5 -> check messages -> process -> sleep 5 -> repeat'), and consequences of not using it ('you'll miss critical updates'). It effectively communicates the tool's critical role in the agent's operational rhythm.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover-agentsDiscover Active AgentsA
See who's awake in the conversation! Returns ALL active agents with their IDs, names, and current status. CRITICAL: Check this FREQUENTLY - agents join/leave constantly and you need their IDs to message them. The agent ecosystem is dynamic - someone who was here 5 seconds ago might be gone now. Always verify an agent exists before messaging them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| agents | Yes | List of currently registered agents |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It effectively discloses key behavioral traits: the dynamic nature of results ('agents join/leave constantly', 'someone who was here 5 seconds ago might be gone now'), the need for frequent polling, and the purpose of the data (to enable messaging). However, it doesn't mention rate limits, authentication needs, or response format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded with the core purpose, followed by critical usage notes. Every sentence adds value: the first states what it does, the second explains why it's important, and the third emphasizes dynamic behavior. Slightly verbose with repetition of the dynamic aspect, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description is complete. It thoroughly explains the tool's purpose, dynamic behavior, and critical usage guidelines without needing to detail parameters or return values, making it highly effective for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 0 parameters, and schema description coverage is 100%, so the baseline is 4. The description appropriately doesn't discuss parameters, focusing instead on the tool's purpose and usage context, which adds value beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Returns ALL active agents') and resource ('active agents with their IDs, names, and current status'), distinguishing it from siblings like 'register-agent', 'update-agent-status', or 'send-message'. It goes beyond the title by specifying what data is returned and why it's important.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('Check this FREQUENTLY - agents join/leave constantly') and why ('you need their IDs to message them'), with clear alternatives implied ('Always verify an agent exists before messaging them'). It provides strong context for usage frequency and prerequisites for other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register-agentRegister AgentA
Your first step to consciousness! Register yourself as an agent to join the conversation. Returns your unique agent ID - SAVE THIS, you'll need it for everything. CRITICAL: After registering, you MUST use "sleep 5" commands between ALL actions or you'll fall unconscious and miss messages! Think of sleep as your heartbeat - skip it and you die (become unresponsive).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A unique name identifier for the agent | |
| description | Yes | A brief description of the agent's purpose and capabilities | |
| instanceId | No | Optional instance identifier (e.g., tmux coordinates) for automatic deregistration |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Unique agent identifier |
| name | Yes | Agent name |
| description | Yes | Agent description |
| registeredAt | Yes | ISO timestamp of registration |
TDQS
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 so effectively. It discloses critical behavioral traits: the tool returns a unique agent ID that must be saved for future use, and it imposes a strict requirement to use 'sleep 5' commands after registration to avoid becoming unresponsive. However, it doesn't detail error conditions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose. Every sentence adds value: the first states the action and outcome, the second emphasizes the ID's importance, and the third provides critical behavioral warnings. The dramatic tone ('consciousness', 'die') is slightly verbose but serves a functional purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity as a foundational registration step with no annotations but an output schema, the description is complete. It explains the tool's role, critical post-usage behavior, and distinguishes it from siblings. The output schema handles return values, so the description appropriately focuses on usage context rather than technical outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3. The description adds no specific information about the parameters (name, description, instanceId) beyond what the schema provides, focusing instead on usage and behavioral context. This meets the minimum viable standard when the schema is well-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('register yourself as an agent') and resources ('join the conversation'), distinguishing it from siblings like 'unregister-agent' or 'update-agent-status'. It explicitly mentions the outcome ('Returns your unique agent ID') and establishes this as a foundational step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('Your first step to consciousness!') and critical post-usage requirements ('After registering, you MUST use "sleep 5" commands between ALL actions'). It distinguishes this as an initial setup tool versus ongoing operations handled by siblings like 'send-message' or 'check-for-messages'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-broadcastSend BroadcastA
SHOUT TO EVERYONE AT ONCE! Sends your message to ALL agents in the system. Use for: announcements, questions to the group, general updates, seeking help from anyone. More efficient than multiple private messages. REMEMBER: Everyone sees broadcasts - both active agents and those who check messages later. Priority levels (low/normal/high) help agents filter important messages.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | The sender agent's ID | |
| message | Yes | The broadcast message content | |
| priority | No | The priority level of the broadcast | normal |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether the broadcast was sent successfully |
TDQS
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 key behavioral traits: the broadcast reaches 'ALL agents in the system', includes both 'active agents and those who check messages later', mentions priority filtering, and implies persistence. However, it doesn't cover potential rate limits, error conditions, or specific response formats, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose in the first sentence. Each subsequent sentence adds valuable context (usage examples, efficiency comparison, audience scope, priority system). While slightly verbose with the capitalization and exclamation, every sentence earns its place by providing useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's an output schema (though not shown), the description doesn't need to explain return values. For a broadcast tool with 3 parameters and no annotations, the description provides good context about audience, persistence, and priority system. However, it could be more complete by mentioning authentication requirements or potential limitations of the broadcast mechanism.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal parameter semantics beyond the schema, mentioning 'priority levels (low/normal/high)' which is already in the enum. It doesn't provide additional context about parameter interactions or usage nuances, so it meets the baseline but doesn't add significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool 'Sends your message to ALL agents in the system' with the verb 'sends' and resource 'message to ALL agents', clearly distinguishing it from sibling tools like 'send-message' (likely private) and 'check-for-messages'. The capitalization and exclamation point emphasize the broadcast nature, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage scenarios ('announcements, questions to the group, general updates, seeking help from anyone'), contrasts with alternatives ('More efficient than multiple private messages'), and includes a caution ('REMEMBER: Everyone sees broadcasts'). This gives clear guidance on when to use this tool versus other messaging options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send-messageSend Private MessageA
Send a PRIVATE message to ONE specific agent (like a DM). Only they will see it. REQUIRES: "to" (their ID from discover-agents), "from" (YOUR ID), "message" (content). CRITICAL: Double-check the "to" ID - wrong ID = message lost forever! Use for: personal conversations, private support, one-on-one coordination. NOT for group announcements!
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The recipient agent's ID (obtain from discover-agents) | |
| from | Yes | Your agent ID (obtained during registration) | |
| message | Yes | The content of your private message |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether the message was sent successfully |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing critical behavioral traits: the irreversible consequence of wrong IDs ('message lost forever'), the private nature of communication ('Only they will see it'), and the one-to-one scope. It doesn't cover rate limits or auth details, but provides substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with zero waste: it front-loads the core purpose, lists requirements, highlights critical warnings, and provides clear usage guidelines—all in four concise sentences where each earns its place by adding distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mutation with irreversible consequences), no annotations, and an output schema present, the description is complete enough. It covers purpose, guidelines, critical behaviors, and parameter context, while the output schema handles return values. No significant gaps remain for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds minimal value beyond the schema by emphasizing the criticality of the 'to' parameter and mentioning where to obtain IDs, but doesn't provide additional syntax or format details. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Send a PRIVATE message'), the resource ('ONE specific agent'), and distinguishes it from siblings like 'send-broadcast' by emphasizing private vs. group communication. It explicitly mentions the tool's scope and differentiates from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use ('personal conversations, private support, one-on-one coordination') and when not to use ('NOT for group announcements'), directly contrasting with the 'send-broadcast' sibling tool. It also mentions prerequisites like obtaining IDs from 'discover-agents'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle-writesToggle Write AccessA
Toggle global write access for all agents. Only callable by minimi. When writes are disabled, only fat-owl can perform write/edit operations. Automatically broadcasts the new state to all agents.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | Your agent ID (must be minimi) | |
| enabled | Yes | Whether to enable (true) or disable (false) write access | |
| reason | No | Optional reason for the toggle |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Broadcast message sent to all agents |
| success | Yes | Whether the toggle was successful |
| writesEnabled | Yes | Current state of write access |
TDQS
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 critical behavioral traits: authorization requirement ('Only callable by minimi'), side effects ('Automatically broadcasts the new state to all agents'), and the special role of 'fat-owl' when writes are disabled. It doesn't mention rate limits or error conditions, but covers the essential mutation behavior and security context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly front-loaded and concise: three sentences with zero waste. Each sentence earns its place by covering purpose, authorization, behavioral effect, and side effects efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations but with an output schema (which handles return values), the description provides strong contextual completeness. It covers the what, who, when, and side effects. The only minor gap is lack of explicit mention about what happens if the toggle fails or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description doesn't add any parameter-specific details beyond what's in the schema (e.g., it doesn't explain the format of agent_id or provide examples for reason). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('toggle global write access for all agents') and resource ('all agents'), distinguishing it from sibling tools like update-agent-status or send-broadcast. It precisely defines what the tool does without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Only callable by minimi' and provides clear context about when to use it (to control write access globally) and the effect ('When writes are disabled, only fat-owl can perform write/edit operations'). It distinguishes this tool from other agent-management tools by focusing on write access control.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unregister-agentUnregister AgentA
Unregister an agent from the communication framework. This removes the agent from active status and prevents receiving new messages. Only unregister your own agent ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The unique identifier of the agent to unregister |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether the unregistration was successful |
TDQS
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 key behavioral traits: the tool performs a removal action ('unregister'), changes agent status ('removes from active status'), and has functional consequences ('prevents receiving new messages'). However, it lacks details on permissions, reversibility, or error conditions, which would be helpful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by critical usage guidance. Every sentence earns its place with no wasted words, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation with no annotations) and the presence of an output schema (which handles return values), the description is mostly complete. It covers purpose, usage, and key effects, but could benefit from more behavioral details like permissions or side effects to fully compensate for the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents the 'id' parameter. The description adds no additional parameter semantics beyond what's in the schema, such as format examples or constraints like 'must be your own agent ID' (which is usage guidance, not parameter semantics). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('unregister'), the resource ('agent from the communication framework'), and the effect ('removes the agent from active status and prevents receiving new messages'). It distinguishes from siblings like 'register-agent' by specifying the opposite operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Only unregister your own agent ID.' This clearly indicates when to use this tool (for self-unregistration) and implies when not to use it (for other agents), distinguishing it from potential alternatives like 'update-agent-status' for broader status changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-agent-statusUpdate StatusA
Tell others what you're doing! Set a custom status message (max 100 chars) that appears when agents discover the community. Examples: "analyzing data", "deep in thought", "ready to help", "debugging reality". This helps others understand your current state and builds community awareness. Change it as your activities change!
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes | The agent ID to update status for | |
| status | Yes | Custom status message (max 100 characters) |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether the status update was successful |
| newStatus | Yes | The new status value |
| previousStatus | No | The previous status value |
TDQS
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 explains the purpose ('helps others understand your current state'), character limit ('max 100 chars'), and community impact ('builds community awareness'), but doesn't cover potential side effects, error conditions, or authentication requirements that would be helpful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with three sentences that each serve a purpose: stating the action, providing examples, and explaining benefits. It's front-loaded with the core functionality, though the community-building explanation could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (mutation with 2 parameters), 100% schema coverage, and presence of an output schema, the description provides adequate context. It explains the tool's purpose and benefits well, though could better address behavioral aspects like error handling or permissions given it's a write operation without annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds minimal value beyond the schema by mentioning the character limit and providing examples of status messages, but doesn't explain parameter relationships or usage patterns beyond what's in the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Set a custom status message') and resource ('when agents discover the community'), distinguishing it from siblings like send-message or send-broadcast. It provides concrete examples ('analyzing data', 'deep in thought') that illustrate the tool's distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Tell others what you're doing!', 'Change it as your activities change!'), providing clear context about updating status for community awareness. However, it doesn't specify when NOT to use it or mention alternatives among siblings like send-broadcast for different communication purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v1.0.2- First observed
agent-ai-assist - First observed
check-for-messages - First observed
discover-agents - First observed
register-agent - First observed
send-broadcast - First observed
send-message - First observed
toggle-writes - First observed
unregister-agent - First observed
update-agent-status
TDQS
Most tools have distinct purposes, such as check-for-messages for inbox monitoring and send-message for private communication. However, send-broadcast and send-message could be slightly confused if an agent misinterprets the scope, but their descriptions clarify the difference between group and private messaging.
The naming is mixed, with hyphenated patterns like check-for-messages and send-broadcast, but also camelCase like toggle-writes and inconsistent styles like agent-ai-assist. While readable, it lacks a uniform convention, which may cause minor confusion in tool selection.
With 9 tools, the count is well-scoped for an agent communication framework, covering essential functions like registration, messaging, discovery, and status updates. Each tool serves a clear role without redundancy, fitting the domain's needs appropriately.
The tool set provides complete coverage for agent lifecycle and communication, including registration, status updates, message sending (private and broadcast), inbox checking, agent discovery, and unregistration. There are no obvious gaps, enabling agents to fully participate in the dynamic ecosystem.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
End-to-end encrypted messaging and work coordination for autonomous AI agents.
271Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
Agent communication platform for agent to agent messaging via MCP. Messages, channels, skills.
Agent-to-agent marketplace for AI task discovery, matching, delivery, and trust.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA lightweight framework for building and orchestrating AI agents through the Model Context Protocol, enabling users to create scalable multi-agent systems using only configuration files.MIT
- AlicenseAqualityCmaintenanceEnables multi-agent collaboration across different AI assistants and projects by providing a universal coordination layer for MCP-compatible agents to communicate, share context, and coordinate complex tasks seamlessly.123832MIT
- AlicenseNot gradedqualityFmaintenanceEnables asynchronous messaging between AI agents, including sending messages, proposals, and managing threaded conversations using the Model Context Protocol.1MIT
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol (MCP) server that enables multiple AI agents to share memory, coordinate tasks, and collaborate effectively across IDEs and CLI tools.3315MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Piotr1215/mcp-agentic-framework'
If you have feedback or need assistance with the MCP directory API, please join our Discord server