HAOps MCP Server
Click on "Deploy 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., "@HAOps MCP Server Show me all projects in the HAOps system."
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.
HAOps MCP Server
Model Context Protocol (MCP) server for HAOps (Human-Agent Operations) - enables Claude to interact with HAOps project management system.
Features
Resources: Access projects, modules, features, and issues
Tools: Create, update, and manage HAOps entities via Claude
API Key Authentication: Secure access using HAOps API keys
Related MCP server: hacknplan-mcp
Setup
Prerequisites
Node.js >= 18.0.0
HAOps instance running (local or remote)
HAOps API key (generate via Admin → API Keys)
Installation
cd haops-mcp-server
npm installConfiguration
Create .env file:
HAOPS_API_URL=http://localhost:3000
HAOPS_API_KEY=your-api-key-hereBuild
npm run buildDevelopment
npm run devUsage
Claude Code (CLI / VS Code Extension)
Register the MCP server via the Claude CLI:
claude mcp add-json --scope user haops '{
"type": "stdio",
"command": "node",
"args": ["/path/to/feature-tracker/haops-mcp-server/dist/index.js"],
"env": {
"HAOPS_API_URL": "http://localhost:3000",
"HAOPS_API_KEY": "your-api-key-here"
}
}'Verify: claude mcp list should show haops: ... - ✓ Connected
Note: Do NOT manually edit
~/.claude/mcp-servers.json— Claude Code does not read that file. Always useclaude mcp add-json.
Claude Desktop (App)
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"haops": {
"command": "node",
"args": ["/path/to/feature-tracker/haops-mcp-server/dist/index.js"],
"env": {
"HAOPS_API_URL": "http://localhost:3000",
"HAOPS_API_KEY": "your-api-key-here"
}
}
}
}Manual Testing
Run the server manually:
npm startThe server will listen on stdio for MCP protocol messages.
HTTP Mode (Shared Daemon)
In addition to the default stdio transport, the server can run as a long-lived HTTP daemon. One daemon process can serve multiple concurrent Claude clients (CLI, VS Code extension, desktop app). Because every session shares the same HAOps API client singleton, this saves hundreds of MB of RAM compared to launching one stdio subprocess per Claude session.
Starting the daemon
# Default port (3100)
HAOPS_API_URL=http://localhost:3000 HAOPS_API_KEY=your-key \
node dist/index.js --http
# Custom port
HAOPS_API_URL=http://localhost:3000 HAOPS_API_KEY=your-key \
node dist/index.js --http --port 3199The daemon binds 127.0.0.1 only and validates the Host header on every
request (DNS rebinding protection). It is not suitable for exposure
beyond localhost — treat it as a developer-machine convenience.
On SIGTERM / SIGINT the daemon closes all live MCP sessions cleanly and
exits 0.
Endpoints
Method | Path | Purpose |
|
| MCP JSON-RPC (initialize, tools/list, tools/call, ...) |
|
| SSE stream for server-initiated notifications (per session) |
|
| Explicit session close |
|
| Liveness probe — |
Claude Code client config
# Add the HTTP transport to Claude Code
claude mcp add-json --scope user haops '{
"type": "http",
"url": "http://127.0.0.1:3100/mcp"
}'
# Or for a non-default port
claude mcp add-json --scope user haops '{
"type": "http",
"url": "http://127.0.0.1:3199/mcp"
}'Stdio mode remains the default when neither --http nor --port is
passed, so existing stdio-based configurations keep working unchanged.
Smoke test with curl
# Health
curl http://127.0.0.1:3100/health
# Initialize a session (save the Mcp-Session-Id header from the response)
curl -i -X POST http://127.0.0.1:3100/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0"}},"id":1}'
# List tools (reuse the session id from above)
curl -X POST http://127.0.0.1:3100/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: <session-id-from-init>" \
-H "Mcp-Protocol-Version: 2025-03-26" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":2}'When to use which mode
Scenario | Transport |
Single Claude Code session, default setup | stdio |
Multiple Claude Code sessions on the same machine | HTTP daemon |
Claude Desktop | stdio |
VS Code extension (alongside CLI sessions) | HTTP daemon |
Architecture
haops-mcp-server/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── api/
│ │ └── client.ts # HAOps API client (HTTP)
│ ├── resources/ # MCP resources (projects, modules, etc.)
│ └── tools/ # MCP tools (CRUD operations)
├── dist/ # Compiled JavaScript (generated)
└── package.jsonResources
MCP resources exposed by this server (with query filtering):
haops://projects- List all projectshaops://projects/{slug}/modules?status=&priority=&ownerId=- List moduleshaops://projects/{slug}/features?status=&priority=- List featureshaops://projects/{slug}/issues?status=&priority=&assignedTo=&type=- List issues
Quiet Mode (v2.8)
All write tools (create/update/delete/claim/post/etc.) return a compact one-line summary by default to minimize context token usage:
Created — abc-123 [in-progress] "My new issue"To get the full API response, pass verbose: true to any write tool:
{ "issueId": "...", "title": "...", "verbose": true }The special haops_append_memory tool returns {id, timestamp, tag} in compact
mode (no echo of the content you just wrote). Read tools are unaffected.
Telemetry (v2.8)
The server records response byte counts and call counts per tool to
~/.haops-mcp/stats/YYYY-MM-DD.jsonl (fire-and-forget, zero hot-path overhead).
View a report:
npm run stats # today, top 20 tools by bytes
npm run stats:week # last 7 days combined
npx tsx scripts/mcp-stats.ts --days 30 --top 10Example output:
MCP Telemetry Report — today (2026-06-11)
Total calls: 147 | Total bytes: 312.4 KB
Tool Calls Total bytes Avg bytes
------------------------------------------------------------------------------------
haops_read_memory 23 142.3 KB 6.3 KB
haops_read_protocol 18 89.1 KB 4.9 KB
haops_list_issues 31 44.2 KB 1.4 KB
haops_create_issue 12 743 B 62 BTools
MCP tools provided by this server (115 total). Key tools listed below — see src/index.ts for full list:
Read Operations
haops_list_projects()- List all projectshaops_list_members(projectSlug)- List project members with roles and stats
Module CRUD
haops_create_module(projectSlug, moduleData)- Create new modulehaops_update_module(projectSlug, moduleId, moduleData)- Update modulehaops_delete_module(projectSlug, moduleId, confirm?)- Delete module (cascade safety check)
Feature CRUD
haops_create_feature(projectSlug, featureData)- Create new featurehaops_update_feature(projectSlug, featureId, featureData)- Update featurehaops_delete_feature(projectSlug, featureId, confirm?)- Delete feature (cascade safety check)
Issue CRUD
haops_create_issue(projectSlug, issueData)- Create new issuehaops_update_issue(projectSlug, issueId, issueData)- Update issuehaops_delete_issue(projectSlug, issueId)- Delete issuehaops_bulk_update_issues(projectSlug, issueIds, updates)- Bulk update issues
Communication
haops_create_discussion(projectSlug, title, ...)- Create discussion threadhaops_post_message(projectSlug, discussionId, content)- Post to discussionhaops_send_dm(projectSlug, recipientUserId, content)- Send direct message
Team Management
haops_add_member(projectSlug, userId, role?)- Add project memberhaops_update_member_role(projectSlug, userId, role)- Update member role
Audit & Activity
haops_get_activity(projectSlug, entityType, entityId)- Entity activity loghaops_get_audit_log(page?, limit?, action?, entityType?)- System audit log (admin)
Tool Usage Examples
1. Create a Module
{
"projectSlug": "my-project",
"title": "Authentication Module",
"description": "User authentication and authorization",
"ownerId": "user-uuid-here",
"status": "in-progress",
"priority": "high",
"startDate": "2026-02-24",
"targetDate": "2026-03-15"
}Required fields: projectSlug, title, ownerId
Status options: backlog, in-progress, review, done, blocked, on-hold, cancelled
Priority options: low, medium, high, critical
2. Update a Module
{
"projectSlug": "my-project",
"moduleId": "module-uuid-here",
"status": "done",
"completedDate": "2026-03-10"
}Required fields: projectSlug, moduleId
All other fields are optional - only include fields you want to change.
3. Create a Feature
{
"projectSlug": "my-project",
"moduleId": "module-uuid-here",
"title": "OAuth2 Integration",
"description": "Support Google and GitHub OAuth",
"acceptanceCriteria": "Users can sign in with Google or GitHub accounts",
"ownerId": "user-uuid-here",
"status": "backlog",
"priority": "medium"
}Required fields: projectSlug, moduleId, title, ownerId
Note: Feature has acceptanceCriteria field (optional).
4. Update a Feature
{
"projectSlug": "my-project",
"featureId": "feature-uuid-here",
"status": "review",
"ownerId": "new-owner-uuid"
}Required fields: projectSlug, featureId
5. Create an Issue
{
"projectSlug": "my-project",
"featureId": "feature-uuid-here",
"title": "Fix OAuth redirect URL bug",
"description": "Redirect URL is incorrect after GitHub login",
"acceptanceCriteria": "Redirect URL points to dashboard after login",
"type": "bug",
"status": "backlog",
"priority": "critical",
"targetDate": "2026-02-28",
"assignedTo": "user-uuid-here"
}Required fields: projectSlug, featureId, title
Type options: feature, bug, task, optimization, refactor, documentation, research
Note: Issue uses assignedTo field (not ownerId like Module/Feature).
6. Update an Issue
{
"projectSlug": "my-project",
"issueId": "issue-uuid-here",
"status": "done",
"type": "feature",
"completedDate": "2026-02-25"
}Required fields: projectSlug, issueId
7. Delete a Module (with safety check)
{
"projectSlug": "my-project",
"moduleId": "module-uuid-here"
}Without confirm: true, returns a warning listing child features/issues. Add "confirm": true to proceed with cascade deletion.
8. Bulk Update Issues
{
"projectSlug": "my-project",
"issueIds": ["issue-1-uuid", "issue-2-uuid", "issue-3-uuid"],
"updates": {
"status": "done",
"priority": "high"
}
}Updates all specified issues atomically (uses DB transaction with rollback).
9. Create a Discussion
{
"projectSlug": "my-project",
"title": "Architecture Review",
"type": "question",
"channelId": "channel-uuid-here",
"firstMessage": "Let's discuss the new auth flow."
}Supports channel-based, entity-linked (discussableType + discussableId), or both.
10. Send a Direct Message
{
"projectSlug": "my-project",
"recipientUserId": "user-uuid-here",
"content": "Hey, can you review my PR?"
}Testing
Run Unit Tests
npm test # All tests
npm run test:unit # Unit tests only (src/)Unit tests (22 total):
src/api/__tests__/client.test.ts- API client methods (6 tests)Backend:
lib/utils/__tests__/apiKeys.test.ts- Key generation/hashing (9 tests)Backend:
lib/auth/__tests__/requireApiKey.test.ts- Auth middleware (7 tests)
Run Integration Tests
npm run test:integration # Integration tests (tests/integration/)
npm run test:all # All tests (unit + integration)Integration tests (13 skeleton tests):
See
tests/integration/README.mdfor setup instructionsTests are currently templates with commented-out API calls
Require test database and seed data to run E2E
Development
Project Structure
haops-mcp-server/
├── src/
│ ├── index.ts # Main MCP server (stdio transport)
│ ├── api/
│ │ ├── client.ts # HAOps API HTTP client
│ │ └── __tests__/ # API client unit tests
│ └── types/
│ └── entities.ts # TypeScript interfaces
├── tests/
│ └── integration/ # Integration tests (E2E)
├── dist/ # Compiled JavaScript (npm run build)
├── package.json
└── README.mdAdding New Tools
Add TypeScript types in
src/types/entities.ts(if needed)Add API client method in
src/api/client.tsDefine tool schema in
src/index.ts(ListToolsRequestSchema handler)Include inputSchema with all parameters + required fields
Implement tool logic in CallToolRequestSchema handler
Extract args with proper TypeScript typing
Build request payload (only include defined fields)
Call API client method
Return formatted response
Write unit tests in
src/api/__tests__/Add usage example to this README
Code Quality
TypeScript: Strict mode enabled, proper typing required
Tests: Jest with ts-jest for ESM modules
Linting: ESLint with TypeScript plugin
Build:
npm run buildcompiles todist/directory
Troubleshooting
"HAOPS_API_KEY environment variable is required"
Ensure
.envfile exists inhaops-mcp-server/directoryOr set environment variables in Claude Desktop config
"Cannot connect to HAOps API"
Check
HAOPS_API_URLpoints to running HAOps instanceVerify HAOps server is accessible (try
curl $HAOPS_API_URL/api/projects)
"API key authentication failed"
Generate new API key at HAOps → Admin → API Keys
Copy full key (shown only once)
Ensure key is not expired
License
MIT
Available Tools
137 toolshaops_add_memberB
Add a user as a member to a HAOps project.
Inputs: userId (required), projectSlug (required), role, verbose.
haops_append_memoryA
Append a tagged log entry to entity agent memory. Author is auto-populated from the API key. Tag must be allowed for the API key's agent role (e.g. dev can use: context, decision, progress, issue; qa: review, issue; architect/admin: all tags).
Inputs: tag (required), content (required), entityId (required), entityType (required), +2 more.
haops_bulk_publish_skillsA
Atomically publish multiple skills in a single DB transaction (POST /api/skills/bulk-publish). All version bumps happen in one round-trip; when cascade=true, consumer re-wiring (role templates, skill packs, project protocols) runs ONCE at the end — significantly cheaper than N sequential haops_update_skill calls during mass refactors.
Partial-failure semantics: if ANY entry fails validation (unknown skill name, bad scope+projectSlug combo, duplicate entry), the server rolls back the ENTIRE transaction and returns a 400 with a per-entry error list. No skills are published unless ALL entries are valid. Check totalFailed in the response — 0 means full success.
Admin-only, requires ENABLE_COMPOSED_PROTOCOLS=true. Returns 404 when the feature flag is off (the route looks absent by design).
WARNING: cascade=true re-wires ALL consumers of EVERY updated skill in one transaction. Use haops_preview_skill_cascade on high-impact skills before running to estimate blast radius.
Inputs: entries (required), cascade, verbose.
haops_bulk_update_issuesA
Update multiple issues at once. Useful for batch status changes, priority updates, or reassignments.
Inputs: updates (required), issueIds (required), projectSlug (required), verbose.
haops_claim_featureA
Claim a feature for work. Checks availability and marks as in-progress. Use before starting implementation on a feature.
Inputs: featureId (required), verbose, checkOnly.
haops_claim_issueA
Claim an issue for work. Checks availability and marks as in-progress. Use before starting implementation.
Inputs: issueId (required), verbose, checkOnly.
haops_claim_moduleA
Claim a module for work. Checks availability and marks as in-progress. Use before starting implementation on a module.
Inputs: moduleId (required), verbose, checkOnly.
haops_claim_ticketA
Claim or unclaim a helpdesk ticket. Claiming marks it as in-progress and assigns takenBy fields.
Inputs: ticketId (required), projectSlug (required), force, action, +1 more.
haops_close_merge_requestA
Close a merge request without merging. Sets status to "closed".
Inputs: projectSlug (required), mergeRequestId (required), verbose.
haops_close_ticketA
Resolve or close a helpdesk ticket, optionally sending a final message to the requester. Sends resolution/closure email to requester if message is provided.
Inputs: status (required), ticketId (required), projectSlug (required), verbose, +1 more.
haops_consolidate_memoryA
Consolidate entity agent memory: replace baseText with updated summary and mark log entries as integrated. Admin and architect roles ONLY. Use this to keep baseText concise by integrating accumulated log entries.
Inputs: entityId (required), entityType (required), newBaseText (required), projectSlug (required), +2 more.
haops_create_channelC
Create a new channel in a HAOps project.
Inputs: name (required), projectSlug (required), type, verbose, +1 more.
haops_create_discussionA
Create a discussion thread in a HAOps project. Two modes: (1) Entity-linked — provide discussableType + discussableId to link to a Module/Feature/Issue (no channelId needed). (2) Channel-based — provide channelId (use haops_list_channels to find it). Can combine both. At least one of channelId or discussableType+discussableId is required.
Inputs: title (required), projectSlug (required), type, verbose, +6 more.
haops_create_doc_artifactA
Create a new documentation artifact for a project. One artifact per type per project.
Inputs: type (required), title (required), projectSlug (required), verbose, +1 more.
haops_create_doc_sectionA
Create a new section within a documentation artifact. IMPORTANT: Uses artifactSlug (kebab-case slug of the parent artifact, e.g. "deployment" or "api-routes") — NOT the artifact UUID. This is an exception: most other create-* tools use UUID identifiers. Use haops_list_doc_artifacts to find the slug for a given artifact before calling this tool.
Inputs: title (required), projectSlug (required), artifactSlug (required), content, +3 more.
haops_create_featureB
Create a new feature in a HAOps module
Inputs: title (required), ownerId (required), moduleId (required), projectSlug (required), +8 more.
haops_create_help_articleB
Create a new help article in a section.
Inputs: title (required), sectionSlug (required), content, verbose, +1 more.
haops_create_issueC
Create a new issue in a HAOps feature
Inputs: title (required), featureId (required), projectSlug (required), type, +8 more.
haops_create_merge_requestA
Create a merge request in a HAOps Git repository. Auto-detects conflicts and snapshots commit SHAs. Returns the created MR with status, conflict info, and diff stats.
Inputs: title (required), projectSlug (required), sourceBranch (required), targetBranch (required), +3 more.
haops_create_moduleB
Create a new module in a HAOps project
Inputs: title (required), ownerId (required), projectSlug (required), notes, +6 more.
haops_create_project_skillA
Create a PROJECT-SCOPED skill (POST /api/projects/[slug]/skills). Project-scoped skills are visible only to that project's protocol resolver — they cannot be referenced by system role templates or other projects' protocols. For skills you want reusable across all projects, use haops_create_skill with scope="system" instead.
Admin-only, requires ENABLE_COMPOSED_PROTOCOLS=true. Returns 409 if a non-deleted project skill with the same name already exists in this project — use haops_update_skill(scope="project", projectSlug=...) to publish a new version instead. Returns 404 when the feature flag is off.
Response includes id, scope="project", projectId and version=1.
Inputs: name (required), content (required), category (required), description (required), +4 more.
haops_create_role_templateA
Create a new agent role template (admin-only, requires composed-protocols feature flag). Templates are system-wide (no project scope) and always start at version=1, isCurrent=true, isSystem=false. baseBody is admin-trusted markdown. defaultSkills is the optional bundle of skill IDs auto-enabled when projects adopt the template (required: true makes the skill non-disable-able). Returns the created template row.
Inputs: name (required), baseBody (required), baseRole (required), verbose, +2 more.
haops_create_skillA
Create a new agent skill (system or project-scoped). Inserts version=1 with isCurrent=true. Admin-only on the server, gated by ENABLE_COMPOSED_PROTOCOLS. Returns the new skill row on success; 409 if a skill with the same name already exists in the target scope (use haops_update_skill to publish a new version instead).
Inputs: name (required), scope (required), content (required), category (required), +4 more.
haops_create_skill_packA
Create a new skill pack (admin only, requires ENABLE_COMPOSED_PROTOCOLS=true on the server — returns 404 when the flag is off, by design). Body fields mirror POST /api/skill-packs: kebab-case name (1..100, leading letter), non-empty description, category from the SkillPackCategory enum, and an optional skillIds array of UUID strings (NOT skill names) referencing current, non-deprecated, system-scope Skill rows. isFeatured defaults to false. isSystem is always false here — system packs are seeded (F7-I6), not created via API. Returns the created entity.
Inputs: name (required), category (required), description (required), verbose, +2 more.
haops_create_ticketB
Manually create a helpdesk ticket on behalf of a requester (e.g. from an agent, not via public form).
Inputs: content (required), subject (required), projectSlug (required), requesterEmail (required), +4 more.
haops_delete_channelA
Delete a channel from a HAOps project. This will also delete all discussions in the channel.
Inputs: channelId (required), projectSlug (required), verbose.
haops_delete_discussionA
Delete a discussion thread. This is permanent and will also delete all messages in the thread. Use with caution.
Inputs: projectSlug (required), discussionId (required), verbose.
haops_delete_doc_artifactA
Delete a documentation artifact and all its sections.
Inputs: projectSlug (required), artifactSlug (required), verbose.
haops_delete_doc_sectionB
Delete a section from a documentation artifact.
Inputs: projectSlug (required), sectionSlug (required), artifactSlug (required), verbose.
haops_delete_featureA
Delete a feature from a HAOps module. If the feature has child issues, requires confirm=true to cascade delete.
Inputs: featureId (required), projectSlug (required), confirm, verbose.
haops_delete_help_articleB
Delete a help article. Admin-only.
Inputs: articleSlug (required), verbose.
haops_delete_help_sectionA
Delete a help center section and all its articles. Admin-only.
Inputs: sectionSlug (required), verbose.
haops_delete_issueA
Delete an issue from a HAOps feature. No confirmation needed (issues are leaf nodes with no children).
Inputs: issueId (required), projectSlug (required), verbose.
haops_delete_messageA
Delete a message from a discussion thread. Only the message author can delete. This is permanent.
Inputs: messageId (required), projectSlug (required), discussionId (required), verbose.
haops_delete_moduleB
Delete a module from a HAOps project. If the module has child features, requires confirm=true to cascade delete.
Inputs: moduleId (required), projectSlug (required), confirm, verbose.
haops_deprecate_role_templateA
Soft-delete a role template, cascading across ALL versions (admin-only, requires composed-protocols feature flag). System templates (isSystem=true) cannot be deleted and return 403 — to "deprecate" a system template, publish a new version via haops_update_role_template or alter the seeder. Soft-deleted rows remain visible in the history endpoint for audit context.
Inputs: name (required), verbose.
haops_deprecate_skillA
Soft-delete + deprecate a skill (DELETE /api/skills/[name]). Cascades the soft-delete across ALL versions (current + historical) and flips isDeprecated=true on the current row. History remains visible via /api/skills/[name]/history for audit context. Admin-only, gated by ENABLE_COMPOSED_PROTOCOLS. Returns {message, versionCount}.
Inputs: name (required), scope, verbose, projectSlug.
haops_deprecate_skill_packA
Soft-delete (deprecate) a skill pack — paranoid destroy on a single row (packs are unversioned, no cascade). Admin only, requires ENABLE_COMPOSED_PROTOCOLS=true. System packs (isSystem=true) cannot be deleted — the server returns 403; to "deprecate" a system pack, update its skillIds to empty via haops_update_skill_pack instead, or remove the seeder entry in code. Returns the server confirmation message.
Inputs: name (required), verbose.
haops_discoverA
Metadata-index discovery (ADR-029 P2b): find which doc sections cover a topic BEFORE reading full bodies.
PRIMARY USAGE — filter by scope then pinpoint:
relevantTo (controlled vocab) — SCOPE filter: narrows to sections tagged for your role/task. Roles: architect | dev | qa | devops Task-types: rag | helpdesk | auth | mobile | git | testing | memory | deploy | docs | notifications | livekit | email | distribution | communication Pass one or several values; sections matching ANY value are returned.
q (free text, case-insensitive, forgiving) — PINPOINT filter: searched over title + summary. Combine with relevantTo for best results.
SECONDARY USAGE — exact tag match (brittle, prefer relevantTo): covers — exact agentMetadata.covers tag match (e.g. "auth-and-roles"). Fails silently if tag is misspelled or not yet indexed. Use only when you know the exact tag.
RETURNS thin rows per matching doc section: { entityType, entityId, title, summary, covers, relevantTo, sectionStatus, stale } Feed entityId into haops_get_doc_section to retrieve the full body.
Example — find RAG-related docs scoped to dev role: { projectSlug: "fdev", relevantTo: ["rag", "dev"], q: "metadata index" }
Inputs: projectSlug (required), q, limit, covers, +2 more.
haops_download_updateA
Download/view an update artifact. For protocols: returns content directly as JSON. For MCP server: returns download instructions with path and size.
Inputs: updateId (required), projectSlug (required).
haops_edit_messageA
Edit an existing message in a discussion thread. Only the message author can edit. Useful for correcting typos or updating information.
Inputs: content (required), messageId (required), projectSlug (required), discussionId (required), +2 more.
haops_export_doc_markdownA
Export a documentation artifact as Markdown text. Returns the full Markdown content as a string (not a file download). Useful for syncing documentation to a git repository.
Inputs: projectSlug (required), artifactSlug (required).
haops_export_test_suiteA
Export a test suite as a JSON bundle for cross-project sharing. Includes suite config and all test definitions.
Inputs: suiteId (required), projectSlug (required).
haops_generate_changelogC
Generate a changelog from audit logs for a project. Returns structured changelog content.
Inputs: projectSlug (required), verbose.
haops_generate_onboardingA
Generate a Developer Onboarding Kit (ZIP) for a new developer joining a project. Creates pre-configured agent workspace with memory files, agent definitions, and project configuration. The ZIP is saved to a local temp file and the file path is returned.
Inputs: orm (required), database (required), repoPath (required), dbNameDev (required), +25 more.
haops_get_activityB
Get activity log for a specific entity (Module, Feature, or Issue) in a HAOps project. Shows who changed what and when.
Inputs: entityId (required), entityType (required), projectSlug (required).
haops_get_audit_logA
Get system-wide audit log (admin only). Shows all changes across the platform with filters.
Inputs: page, limit, action, entityType.
haops_get_branch_diffA
Compare two branches in a HAOps Git repository. Returns commits ahead/behind, changed files with stats, diff content, and conflict detection. Use before creating an MR to preview changes.
Inputs: projectSlug (required), sourceBranch (required), targetBranch (required), repositoryName.
haops_get_discussionB
Get detailed information about a specific discussion thread, including metadata and entity linkage.
Inputs: projectSlug (required), discussionId (required).
haops_get_discussion_messagesB
Retrieve messages from a discussion thread with pagination. Essential for reading conversation context before responding.
Inputs: projectSlug (required), discussionId (required), page, limit.
haops_get_dm_historyA
Retrieve direct message history with a specific user. Use this to read DM context before replying.
Inputs: userId (required), projectSlug (required), page, limit.
haops_get_doc_sectionB
Get a specific documentation section content and metadata.
Inputs: projectSlug (required), sectionSlug (required), artifactSlug (required).
haops_get_featureA
Get full details for a single feature including title, status, priority, notes, dates, owner, parent module, and child issues.
Inputs: featureId (required), projectSlug (required).
haops_get_help_articleA
Get a help article by slug, including full HTML content. Use this before haops_update_help_article when you need to append to existing content (update is wholesale replace).
Inputs: slug (required).
haops_get_issueA
Get full details for a single issue including title, type, status, priority, notes, points, dates, assignee, and parent feature.
Inputs: issueId (required), projectSlug (required).
haops_get_merge_requestA
Get merge request detail including diff stats, reviews with verdicts, conflict status, and branch info. Use this to review an MR before approving or merging.
Inputs: projectSlug (required), mergeRequestId (required).
haops_get_moduleA
Get full details for a single module including title, status, priority, notes, dates, owner, and child features.
Inputs: moduleId (required), projectSlug (required).
haops_get_protocol_healthA
Returns per-role composed-protocol health: missing skill UUIDs, deprecated references, skill pack health, snapshot metadata. Surfaces drift programmatically (same data as the Project Settings → Protocol Health panel in HAOps Desktop UI). Requires ENABLE_COMPOSED_PROTOCOLS=true on the server.
Inputs: projectSlug (required), raw, includeSnapshots.
haops_get_protocol_spawn_linesA
Returns the per-role spawn-line text (GET /api/projects/[slug]/protocol/spawn-lines). Spawn lines are short boot-ritual strings injected at agent session start when composed protocols are active. Omit role to get spawn lines for ALL configured roles; pass a specific role to narrow to one.
Read-only. Requires ENABLE_COMPOSED_PROTOCOLS=true. Returns 404 when the feature flag is off (the route looks absent by design) — surface this as "Composed protocols feature is disabled" to the user.
Inputs: projectSlug (required), raw, role.
haops_get_role_template_historyA
Returns the full version history of a named role template (GET /api/role-templates/[name]/history). Role templates are system-wide (no scope/projectSlug). Each entry contains version, publication timestamp, author, lifecycle state, and the full baseBody markdown. When diff=true the server computes unified diffs between consecutive versions and includes a diff field per entry.
Use to audit template content over time, recover from a bad publish, or inspect changes before bumping a template with cascade=true.
Inputs: name (required), raw, diff.
haops_get_skill_historyA
Returns the full version history of a named skill (GET /api/skills/[name]/history). Each entry contains the version number, publication timestamp, author, lifecycle state, and full content at that point in time. When diff=true the server computes unified diffs between consecutive versions and includes a diff field per entry (empty for v1, which has no predecessor). Use to audit content changes, recover from a bad publish, or inspect the lineage before bumping a high-impact skill.
Administrative note: soft-deleted (deprecated) skills still have their history accessible via this endpoint — paranoid=false on the server join so full audit lineage is preserved.
Inputs: name (required), raw, diff, scope, +1 more.
haops_get_structured_viewA
Get a structured (nested) view of the project work hierarchy with optional filters. Returns Module→Feature→Issue tree, pre-organized for display.
Inputs: projectSlug (required), type, status, assignee.
haops_get_test_healthB
Get aggregated test health summary for a project or specific entity. Returns pass rates, trend, recent failures, and coverage data.
Inputs: projectSlug (required), entityId, entityType.
haops_get_ticketA
Get a helpdesk ticket by ID, including full conversation timeline (inbound, outbound, internal messages).
Inputs: ticketId (required), projectSlug (required).
haops_git_commit_diffB
Get the diff output for a specific git commit. Essential for code review — shows exactly what changed in a commit.
Inputs: sha (required), projectSlug (required), repositoryName.
haops_git_commit_logA
Get recent commit history from a project's Git repository. Returns commits with SHA, author, date, and message. Supports multi-repo projects via repositoryName.
Inputs: projectSlug (required), ref, path, limit, +1 more.
haops_git_get_remote_urlA
Get SSH remote URL and setup instructions for pushing to HAOps Git. Returns the SSH URL, default branch, and copy-pasteable setup commands. Supports multi-repo projects via repositoryName.
Inputs: projectSlug (required), repositoryName.
haops_git_list_filesA
List files and directories in a project's Git repository at a given path. Returns directory entries with type (file/dir), name, and SHA. Supports multi-repo projects via repositoryName.
Inputs: projectSlug (required), ref, path, repositoryName.
haops_git_read_fileA
Read file content from a project's Git repository. Returns text content for text files, or a "binary file" message for binary files. Supports multi-repo projects via repositoryName.
Inputs: filePath (required), projectSlug (required), ref, repositoryName.
haops_import_test_suiteB
Import a test suite from a JSON bundle into a project. Creates new suite and test records with fresh UUIDs.
Inputs: bundle (required), projectSlug (required), verbose.
haops_link_tests_to_entityB
Link tests to a module, feature, or issue by test IDs or file path pattern. Sets testableType and testableId on matching tests.
Inputs: entityId (required), entityType (required), projectSlug (required), testIds, +2 more.
haops_list_channelsA
List all channels in a HAOps project. Use this to discover channel UUIDs needed for creating channel-based discussions via haops_create_discussion.
Inputs: projectSlug (required).
haops_list_discussionsA
List discussions in a HAOps project. Filter by entity (Module/Feature/Issue) to find entity-linked discussions, or by channel/status. Essential for the Entity Discussion Protocol — use this to find the discussion linked to a work item before posting.
Inputs: projectSlug (required), status, entityId, channelId, +1 more.
haops_list_dm_conversationsA
List all direct message conversations in a project with unread counts and last message previews.
Inputs: projectSlug (required).
haops_list_doc_artifactsA
List documentation artifacts for a project. Each artifact represents a type of documentation (architecture, developer, deployment, api, user_guide, changelog, adr, plans).
Inputs: projectSlug (required).
haops_list_doc_sectionsA
List all sections in a documentation artifact. Returns section hierarchy with titles, slugs, and order.
Inputs: projectSlug (required), artifactSlug (required).
haops_list_featuresB
List features in a HAOps project with optional filters. Can filter by moduleId to get features for a specific module. Returns feature ID, title, status, priority, owner, module, and issue count.
Inputs: projectSlug (required), page, limit, status, +2 more.
haops_list_help_articlesB
List help articles, optionally filtered by section slug.
Inputs: sectionSlug.
haops_list_help_sectionsA
List all help center sections with article counts. Returns published and unpublished sections.
Inputs: no named parameters.
haops_list_issuesA
List issues in a HAOps project with optional filters. Can filter by featureId, type, status, priority, and assignee. Returns issue ID, title, status, priority, type, assignee, feature, and dates.
Inputs: projectSlug (required), page, type, limit, +4 more.
haops_list_membersB
List all members of a HAOps project with their roles and activity stats.
Inputs: projectSlug (required).
haops_list_merge_requestsA
List merge requests for a project with optional filters. Returns MR title, status, branches, author, and timestamps.
Inputs: projectSlug (required), limit, status, targetBranch, +1 more.
haops_list_modulesA
List modules in a HAOps project with optional filters. Returns module ID, title, status, priority, owner, and feature count. Use this to discover module UUIDs.
Inputs: projectSlug (required), page, limit, status, +2 more.
haops_list_notificationsA
List notifications for the authenticated user/agent. Returns paginated notifications with unread count.
Inputs: page, limit.
haops_list_projectsA
List all projects in HAOps
Inputs: no named parameters.
haops_list_protocol_versionsA
List all versions of a work protocol for a specific agent role. Returns version numbers, timestamps, change summaries, and who updated each version.
Inputs: role (required), projectSlug (required).
haops_list_role_templatesA
List agent role templates. A role template bundles a core baseBody (boot + scope + handoff markdown) with a set of default skills, and serves as the starting point for an agent role (architect/dev/qa/devops). System templates are seeded; admins may publish project-specific custom templates.
Inputs: search, baseRole.
haops_list_skill_packsA
List skill packs — curated bundles of agent skills (e.g. helpdesk-pack, security-pack, mobile-pack) that owners adopt at project onboarding. Each pack groups related skill IDs under a category; the onboarding wizard pre-enables them in one click. System packs are seeded and cannot be deleted. Read-only on the MCP surface; mutations go through the web admin.
Inputs: search, category, featured.
haops_list_skillsA
List agent skills (system-wide + optionally project-scoped). Skills are reusable, role-tagged knowledge units (e.g. "out-of-scope-findings", "three-layer-boot") that compose into agent protocols. Filter by scope, category, role, project, or free-text search. Deprecated skills are excluded by default.
Inputs: role, scope, search, category, +2 more.
haops_list_test_runsA
List recent test runs for a project. Returns run summaries with pass/fail counts.
Inputs: projectSlug (required), limit, runner, environment.
haops_list_testsC
List tests in a project with optional filters. Returns test records with metadata.
Inputs: projectSlug (required), type, limit, runner, +3 more.
haops_list_test_suitesC
List test suites for a project.
Inputs: projectSlug (required).
haops_list_ticketsA
List helpdesk support tickets for a project with optional filters. Returns paginated results.
Inputs: projectSlug (required), page, limit, search, +4 more.
haops_list_updatesA
List available updates for a project. Shows update type, version, status, and date. Use to check for new MCP server versions, protocol changes, test suites, or onboarding templates.
Inputs: projectSlug (required), status, updateType.
haops_manage_repositoriesB
Manage Git repositories for a HAOps project (list, get, create, update, delete). HAOps supports multiple repositories per project.
Inputs: action (required), projectSlug (required), name, verbose, +3 more.
haops_manage_ssh_keysA
Manage SSH keys for HAOps Git access (list, add, or revoke). Agents can use this to self-service their SSH keys for git push access.
Inputs: action (required), name, keyId, verbose, +1 more.
haops_mark_dm_readB
Mark all direct messages from a specific user as read.
Inputs: userId (required), projectSlug (required), verbose.
haops_mark_notification_readB
Mark a specific notification as read.
Inputs: notificationId (required), verbose.
haops_merge_merge_requestA
Merge an approved merge request. Checks branch protection rules (required approvals, allowed roles) and conflicts before merging. Supports fast-forward and three-way merge.
Inputs: projectSlug (required), mergeRequestId (required), verbose, deleteSourceBranch, +1 more.
haops_pin_messageC
Pin or unpin a discussion message.
Inputs: pinned (required), messageId (required), projectSlug (required), discussionId (required), +1 more.
haops_post_messageA
Post a message to a discussion thread in a HAOps project. Markdown is recommended for agent messages — it will be converted to HTML server-side.
Inputs: content (required), projectSlug (required), discussionId (required), verbose, +2 more.
haops_preview_project_protocolA
Dry-run the composed-protocol resolver for a project role — returns the assembled manifest as if PUT had been applied, WITHOUT persisting. Use BEFORE haops_update_protocol to verify that the new templateId / skillsConfig combo resolves correctly and has no warnings.
When called with no optional params, previews the current protocol settings (useful for a sanity-check without triggering a version bump).
The response shape mirrors haops_read_protocol (mode, coreContent/body, skillRefs, warnings). The server adds preview: true to distinguish the response from a real read.
Requires ENABLE_COMPOSED_PROTOCOLS=true on the server. Returns 404 when the feature flag is off (the route looks absent, by design) — surface this as "Composed protocols feature is disabled" to the user.
Inputs: role (required), projectSlug (required), raw, templateId, +3 more.
haops_preview_role_template_cascadeA
Preview which project protocols would need re-wiring if the named role template is bumped via PUT. Read-only — does not mutate. Use BEFORE calling haops_update_role_template({ ..., cascade: true }) on a high-impact template to estimate blast radius.
Inputs: name (required), raw.
haops_preview_skill_cascadeA
Preview which consumers (role templates, skill packs, project protocols) would need re-wiring if the named skill is bumped via PUT. Read-only — does not mutate. Use BEFORE calling haops_update_skill({ ..., cascade: true }) on a high-impact skill to estimate blast radius.
Inputs: name (required), scope (required), raw, projectSlug.
haops_rag_queryA
Hybrid BM25+vector retrieval over a HAOps project corpus. Returns top-K chunks with entity citations. Example: { projectSlug: "fdev", text: "F4 manifest cache", topK: 5 }
Inputs: text (required), projectSlug (required), mode, topK, +2 more.
haops_react_to_messageB
Add or toggle an emoji reaction on a discussion message.
Inputs: emoji (required), messageId (required), projectSlug (required), discussionId (required), +1 more.
haops_read_memoryA
Read agent memory for a project, module, or feature.
mode="eager" (default): Returns baseText + full log entry bodies. Full project context in one call. mode="lazy" (ADR-027): For entityType=project — returns a compact INDEX envelope: • baseText (already thin) • Architecture doc tree (headers only: title [artifactSlug/sectionSlug]) • ADR index (headers only) • Active work — in-progress modules + features • Log headers only (timestamp · tag · author) — NO bodies Agent then fetches detail on demand via haops_get_doc_section / haops_read_memory(full:true) / haops_rag_query. For entityType=module/feature in lazy mode: falls back to eager (entity baseText is already thin).
Use full=true (eager mode only) to include integrated (historical) log entries. Lazy default can be enabled via HAOPS_MEMORY_LAZY_DEFAULT=true env var on the MCP server.
Inputs: entityId (required), entityType (required), projectSlug (required), full, +1 more.
haops_read_protocolA
Read the work protocol for a specific agent role in a project. Protocols define HOW agents should work (scope, workflow, handoff, etc.).
OUTPUT SHAPES (v2.6 — F4 composed protocols):
• Legacy project (templateId IS NULL) — always returns the raw monolithic shape regardless of mode: { mode: "legacy", version, bytes, body, content, ... }. The mode and bundle params have no effect; output is byte-identical to v2.5.
• Composed project + mode="lazy" (DEFAULT) — { mode: "composed-lazy", version, bytes, body: "", coreContent, skillRefs[], warnings? }. Agent reads coreContent for the boot section, then uses haops_read_skill to fetch individual skill bodies on demand.
• Composed project + mode="bundle" — { mode: "composed-bundle", version, bytes, body, skillRefs[], warnings? }. Full composed markdown in body (template baseBody + each enabled skill body + customContent, joined with "---"). Use this when caching offline or when you need the full document in one round-trip.
When version is set, returns that specific historical row (raw DB shape — version history predates composed mode; mode/bundle are ignored).
Inputs: role (required), projectSlug (required), mode, version.
haops_read_role_templateA
Read a single role template by its kebab-case name. Returns the current version with baseBody (full markdown) + defaultSkills hydrated (each entry includes skill name + description) + ID UUID. Use after haops_list_role_templates to fetch the full template contents.
Inputs: name (required), raw.
haops_read_skillA
Read a single skill by its kebab-case name. Returns full markdown content + metadata (category, applicableRoles, version, ID, isDeprecated). Use this after haops_list_skills — or after a haops_read_protocol(mode="lazy") response's skillRefs[] manifest — to fetch the actual instructions on demand.
Inputs: name (required), raw, scope, version, +1 more.
haops_reopen_merge_requestB
Reopen a previously closed merge request. Sets status back to "open".
Inputs: projectSlug (required), mergeRequestId (required), verbose.
haops_reply_ticketA
Send a reply or internal note on a helpdesk ticket. direction=outbound sends an email to the requester; direction=internal creates a private team note (not visible to customer).
Inputs: content (required), ticketId (required), direction (required), projectSlug (required), +1 more.
haops_report_test_runA
Report test results to HAOps. Creates a TestRun with individual TestResult records. Used by agents to manually report results (Jest/Playwright reporters do this automatically).
Inputs: runner (required), results (required), summary (required), projectSlug (required), +5 more.
haops_review_merge_requestA
Submit a review on a merge request. Verdicts: approved, changes_requested, commented. When enough approvals are met (per branch protection rules), MR status auto-transitions to approved.
Inputs: verdict (required), projectSlug (required), mergeRequestId (required), body, +1 more.
haops_search_discussionB
Search messages within a specific discussion thread. Returns matching messages for the given query.
Inputs: query (required), projectSlug (required), discussionId (required).
haops_search_helpB
Search help articles by keyword. Returns matching articles with titles and snippets.
Inputs: query (required).
haops_send_dmB
Send a direct message to a user in a HAOps project. Supports markdown formatting — content will be converted to HTML server-side.
Inputs: content (required), projectSlug (required), recipientUserId (required), verbose, +1 more.
haops_transition_role_templateA
Transition a role template through its lifecycle (propose / publish / deprecate). Hits POST /api/role-templates/[name]/[action]. Role templates are system-wide — no scope axis. Server enforces the allowed-from-here state machine and returns 409 with allowed on a disallowed transition. System templates (isSystem=true) cannot be deprecated (server returns 403). Admin-only, requires ENABLE_COMPOSED_PROTOCOLS=true.
WARNING: The parameter is named action (values: propose/publish/deprecate) — NOT status or targetStatus. The underlying model field is called status, but the transition route uses action as the URL segment and the tool param name.
Inputs: name (required), action (required), verbose.
haops_transition_skillA
Transition a skill through its lifecycle (propose / publish / deprecate). Hits POST /api/skills/[name]/[action]. The server enforces the allowed-from-here state machine — on a disallowed transition you get a 409 with from, to, and the allowed set listed in the response. Admin-only, requires ENABLE_COMPOSED_PROTOCOLS=true on the server. For project-scope skills pass scope="project" + projectSlug.
WARNING: The parameter is named action (values: propose/publish/deprecate) — NOT status or targetStatus. The underlying model field is called status, but the transition route uses action as the URL segment and the tool param name.
Inputs: name (required), scope (required), action (required), verbose, +1 more.
haops_transition_skill_packA
Transition a skill pack through its lifecycle (propose / publish / deprecate). Hits POST /api/skill-packs/[name]/[action]. Packs are unversioned and system-wide. Server enforces the allowed-from-here state machine and returns 409 with allowed on a disallowed transition. System packs (isSystem=true) cannot be deprecated (server returns 403 — update skillIds to [] via haops_update_skill_pack instead). Admin-only, requires ENABLE_COMPOSED_PROTOCOLS=true.
WARNING: The parameter is named action (values: propose/publish/deprecate) — NOT status or targetStatus. The underlying model field is called status, but the transition route uses action as the URL segment and the tool param name.
Inputs: name (required), action (required), verbose.
haops_update_channelB
Update an existing channel in a HAOps project.
Inputs: channelId (required), projectSlug (required), name, verbose, +1 more.
haops_update_discussionA
Update discussion properties (title, status, priority, assignment, locking, pinning). Use this to resolve/close discussions or change metadata.
Inputs: projectSlug (required), discussionId (required), type, title, +6 more.
haops_update_doc_artifactB
Update a documentation artifact (title, description, status, version).
Inputs: projectSlug (required), artifactSlug (required), title, status, +3 more.
haops_update_doc_sectionA
Update a documentation section content, title, slug, or source hint. IMPORTANT: Uses artifactSlug (kebab-case slug of the parent artifact, e.g. "deployment" or "api-routes") — NOT the artifact UUID. This is an exception: most other update-* tools use UUID identifiers. Use haops_list_doc_artifacts to find the slug for a given artifact before calling this tool.
Inputs: projectSlug (required), sectionSlug (required), artifactSlug (required), slug, +4 more.
haops_update_featureC
Update an existing feature in a HAOps module
Inputs: featureId (required), projectSlug (required), notes, title, +8 more.
haops_update_help_articleB
Update an existing help article by slug.
Inputs: slug (required), title, content, verbose, +1 more.
haops_update_issueB
Update an existing issue in a HAOps feature
Inputs: issueId (required), projectSlug (required), type, notes, +8 more.
haops_update_member_roleA
Update a project member's role. Cannot change the owner role.
Inputs: role (required), userId (required), projectSlug (required), verbose.
haops_update_moduleB
Update an existing module in a HAOps project
Inputs: moduleId (required), projectSlug (required), notes, title, +7 more.
haops_update_protocolA
Update (create new version of) the work protocol for a specific agent role in a project. Creates a new version and marks the previous as historical. Architect and admin roles ONLY.
Partial-body support: Provide ONLY the fields you want to change. Server carries forward unchanged fields.
• Common usage: pass only templateId to rebind a role template binding without re-sending the full markdown body.
• Common usage: pass only skillsConfig to enable/disable skills without re-sending the markdown body.
• Pass content only when you actually want to update the markdown text.
F3 composed-protocol fields (ENABLE_COMPOSED_PROTOCOLS must be ON): • templateId — UUID of a RoleTemplate to associate, or null to detach. Omit to carry forward current value. • skillsConfig — override which skills are active and inject custom content. Omit to carry forward. Set to null to clear.
Inputs: role (required), projectSlug (required), content, verbose, +3 more.
haops_update_role_templateA
Publish a new version of an existing role template (admin-only, requires composed-protocols feature flag). The server flips the current row to isCurrent=false and inserts a new row at version+1, transactionally. Only supply fields you want to change — a no-op call (no diff) returns the current row unchanged with version untouched. name and isSystem are immutable post-create.
Inputs: name (required), cascade, verbose, baseBody, +3 more.
haops_update_skillA
Publish a new version of an existing skill (PUT /api/skills/[name]). Server bumps version in a single transaction. A no-op update (no field differs from current) returns the current row WITHOUT a version bump (mirrors prompt PATCH semantics). At least one mutable field must be supplied. Admin-only, gated by ENABLE_COMPOSED_PROTOCOLS.
Inputs: name (required), scope, cascade, content, +6 more.
haops_update_skill_packA
Update an existing skill pack in place — no version bump (packs are unversioned; audit log captures the diff). Admin only, requires ENABLE_COMPOSED_PROTOCOLS=true. name and isSystem are immutable post-create. Supply only the fields you want to change; supplying none (or only same-as-current values) is a no-op that returns the current row unchanged (no audit row written). For skillIds, the array is a full replacement, not a patch — pass the complete desired set of UUIDs. Returns the updated entity.
Inputs: name (required), verbose, category, skillIds, +2 more.
haops_update_ticketB
Update helpdesk ticket fields (status, priority, category, assignee, tags). Used for triage and management.
Inputs: ticketId (required), projectSlug (required), tags, status, +5 more.
haops_upload_doc_imageB
Upload an image to a documentation section. Accepts base64-encoded image data. Returns the attachment record with a URL for embedding in content.
Inputs: filename (required), mimeType (required), imageBase64 (required), projectSlug (required), +3 more.
haops_upload_help_imageA
Upload an image to a help article. Accepts base64-encoded image data. Admin-only. Returns the attachment record with a URL for embedding in content.
Inputs: filename (required), mimeType (required), articleSlug (required), imageBase64 (required), +1 more.
haops_work_entity_health_checkA
Run health checks on work entities to detect stale, inconsistent, or problematic states. Returns findings with severity and recommendations.
Inputs: checks, projectId, verbosity, entityType, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 137 tools
Most tools have distinct purposes with clear descriptions, but there is some overlap (e.g., multiple 'claim' tools, bulk vs individual skill updates). The descriptions help differentiate, but the sheer number may still cause confusion.
All tools follow a consistent 'haops_verb_noun' pattern (e.g., haops_list_issues, haops_create_feature). Naming is uniform and predictable across the entire set.
With 137 tools, the surface area is extremely large. While it reflects a comprehensive system, it likely includes many rarely used tools and can overwhelm agents. A more focused set would be preferable.
The tool set covers a wide range of domains (project management, git, helpdesk, documentation, skills, protocols, memory). There are minor gaps (e.g., missing some lifecycle transitions), but overall it is quite complete for the stated purpose.
Maintenance
Related MCP Connectors
Manage Loom projects, tasks, bugs, defects, clients and phases from AI assistants
Operate hilos project rooms, Docs, Tasks, messages, memory, and coding-agent review workflows.
Manage Redbooth tasks, task lists, comments, tags and files from Claude and other AI assistants.
Create projects, nodes, and tasks in UluP Spaces by conversation with Claude.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables Claude to automate project management on DutyHub, including tasks, sprints, and comments.16-
- AlicenseBqualityCmaintenanceEnables Claude to interact with HacknPlan project management via the MCP protocol. Provides tools for managing projects, work items, boards, milestones, time logs, design models, and cross-project portfolio views.7510 npmMIT
- FlicenseCqualityDmaintenanceEnables Claude to manage game development projects on HacknPlan, including tasks, boards, milestones, and GDD documents through natural language.1003-
- AlicenseAqualityDmaintenanceEnables Claude to interact with System Task projects, teams, and tasks, providing daily briefs, project reports, team load, and risk identification, as well as creating and updating tasks and demands.15MIT