Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions mcp-registry/servers/standupcraft.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
{
"name": "standupcraft",
"display_name": "StandupCraft",
"description": "MCP server that reads your git commits and GitHub activity to generate daily standups, weekly client reports, and sprint retros inside Claude Desktop. Scans local git repos and GitHub activity for a date range, then drafts structured standup notes, client-ready progress reports, or sprint retrospectives in your own words. No API key required, runs entirely locally.",
"repository": {
"type": "git",
"url": "https://github.com/jabbawocky/standupcraft"
},
"homepage": "https://github.com/jabbawocky/standupcraft",
"author": {
"name": "jabbawocky"
},
"license": "MIT",
"categories": ["Productivity", "Developer Tools"],
"tags": [
"standup",
"git",
"github",
"reports",
"developer-tools",
"claude-desktop",
"mcp-server",
"productivity",
"agile"
],
"installations": {
"npm": {
"type": "npm",
"command": "npx",
"args": [
"-y",
"github:jabbawocky/standupcraft"
],
"description": "Run directly via npx — no global install needed",
"env": {
"GITHUB_TOKEN": {
"description": "GitHub personal access token for fetching GitHub activity (optional — git activity works without it)",
"required": false
},
"REPOS_DIR": {
"description": "Directory to scan for git repositories (default: home directory)",
"required": false
}
}
Comment on lines +35 to +44

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Invalid env map values 🐞 Bug ≡ Correctness

standupcraft.json defines installations.npm.env values as objects containing
description/required, but the schema and runtime config expect env to be a string -> string
map, so validation/parsing will fail.
Agent Prompt
## Issue description
`mcp-registry/servers/standupcraft.json` sets `installations.npm.env.GITHUB_TOKEN` and `installations.npm.env.REPOS_DIR` to objects (with `description` and `required`). The registry schema requires `installations.*.env` to be an object whose values are strings.

## Issue Context
- `mcp-registry/schema/server-schema.json` defines `installations.*.env` as `additionalProperties: { "type": "string" }`.
- MCPM runtime config parsing also models env as `Dict[str, str]`.
- Other manifests put variable metadata under top-level `arguments` and keep `installations.*.env` as placeholder string mappings.

## Fix Focus Areas
- mcp-registry/servers/standupcraft.json[26-46]
- mcp-registry/schema/server-schema.json[214-274]
- src/mcpm/core/schema.py[29-33]

## Suggested change shape
- Add a top-level `arguments` object:
  - `GITHUB_TOKEN`: { description, required: false, example }
  - `REPOS_DIR`: { description, required: false, example }
- Change `installations.npm.env` to string placeholders (or omit entirely if truly unused):
  - `"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}", "REPOS_DIR": "${REPOS_DIR}" }`

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

}
},
Comment on lines +26 to +46
"examples": [
{
"title": "Generate a daily standup",
"description": "Create a standup note from today's git commits and GitHub activity",
"prompt": "Generate my standup for today"
},
{
"title": "Write a weekly client report",
"description": "Summarize a week of commits into a client-ready progress report",
"prompt": "Write a weekly client report for the past 7 days"
},
{
"title": "Sprint retrospective",
"description": "Draft a sprint retro from two weeks of activity",
"prompt": "Draft a sprint retrospective for the past two weeks"
}
],
"tools": [
{
"name": "generate_standup",
"description": "Generate a daily standup note from git commits and GitHub activity",
"inputSchema": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to generate standup for (ISO format, defaults to today)"
}
}
}
},
{
"name": "generate_report",
"description": "Generate a weekly client report or sprint retrospective from git and GitHub activity",
"inputSchema": {
"type": "object",
"properties": {
Comment on lines +64 to +83
"start_date": {
"type": "string",
"description": "Start date for the report period (ISO format)"
},
"end_date": {
"type": "string",
"description": "End date for the report period (ISO format)"
},
"report_type": {
"type": "string",
"description": "Type of report: 'client' for client report, 'retro' for sprint retrospective"
}
Comment on lines +92 to +95

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Constrain report_type to documented values.

Line 94 defines allowed values (client/retro) in prose, but the schema accepts any string. Add an enum so invalid values are rejected before tool execution.

Suggested diff
           "report_type": {
             "type": "string",
-            "description": "Type of report: 'client' for client report, 'retro' for sprint retrospective"
+            "enum": ["client", "retro"],
+            "description": "Type of report: 'client' for client report, 'retro' for sprint retrospective"
           }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"report_type": {
"type": "string",
"description": "Type of report: 'client' for client report, 'retro' for sprint retrospective"
}
"report_type": {
"type": "string",
"enum": ["client", "retro"],
"description": "Type of report: 'client' for client report, 'retro' for sprint retrospective"
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp-registry/servers/standupcraft.json` around lines 92 - 95, The report_type
field in the schema is defined as a generic string type, but the description
documents specific allowed values (client and retro) that are not enforced at
the schema level. Add an enum property to the report_type field definition that
restricts the accepted values to only the documented options: client and retro.
This will ensure invalid values are rejected by the schema validation rather
than being passed through to tool execution.

}
}
}
],
"prompts": [],
Comment on lines +84 to +100
"resources": [],
"is_official": false
}
101 changes: 101 additions & 0 deletions mcp-registry/servers/statuscraft.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
{
"name": "statuscraft",
"display_name": "StatusCraft",
"description": "MCP server that checks the live status of 141 major software services in real time. Ask your AI agent 'is GitHub down?' or 'what's wrong with Stripe?' and get a live answer pulled directly from official status pages, including full incident detail when something is broken. Services include AWS, Azure, Cloudflare, GitHub, Anthropic, OpenAI, Stripe, Vercel, Netlify, Linear, and more. No API key required.",
"repository": {
"type": "git",
"url": "https://github.com/jabbawocky/statuscraft"
},
"homepage": "https://github.com/jabbawocky/statuscraft",
"author": {
"name": "jabbawocky"
},
"license": "MIT",
"categories": ["Monitoring", "Developer Tools"],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Invalid categories values 🐞 Bug ≡ Correctness

statuscraft.json and standupcraft.json use category strings (including "Monitoring" and
"Developer Tools") that are not allowed by the registry schema’s enumerated category list, so
JSON-schema validation will fail and these manifests will be rejected.
Agent Prompt
## Issue description
`mcp-registry/servers/statuscraft.json` and `mcp-registry/servers/standupcraft.json` set `categories` to values that are not permitted by the enumerated category strings in `mcp-registry/schema/server-schema.json` (notably including "Monitoring" and "Developer Tools"), which causes JSON-schema validation to fail and the manifests to be rejected.

## Issue Context
The repo’s schema validation (`scripts/validate_manifest.py`) enforces `mcp-registry/schema/server-schema.json` (via `jsonschema.validate(...)`) for server JSON files; any `categories` entry not present in the schema’s `categories[].enum` list causes validation failure. The current category values in these manifests include strings that are not in that enum (for example, the schema expects "Dev Tools" rather than "Developer Tools").

## Fix Focus Areas
- mcp-registry/servers/statuscraft.json[13-15]
- mcp-registry/servers/standupcraft.json[13-15]
- mcp-registry/schema/server-schema.json[70-89]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

"tags": [
"status",
"monitoring",
"devops",
"uptime",
"incident",
"claude-desktop",
"mcp-server",
"infrastructure",
"observability"
],
"installations": {
"npm": {
"type": "npm",
"command": "npx",
"args": [
"-y",
"github:jabbawocky/statuscraft"
],
"description": "Run directly via npx — no global install needed"
}
},
"examples": [
{
"title": "Check if a service is down",
"description": "Get the live status of any tracked service",
"prompt": "Is GitHub down right now?"
},
{
"title": "Check multiple services at once",
"description": "Get status for several services in parallel",
"prompt": "Check the status of GitHub, AWS, and Stripe"
},
{
"title": "Get incident details",
"description": "When a service is non-operational, get full incident detail",
"prompt": "What's the current Cloudflare incident about?"
}
],
"tools": [
{
"name": "get_status",
"description": "Check the live status of a single service — returns normalized status and incident detail when non-operational",
"inputSchema": {
"type": "object",
"properties": {
"service": {
"type": "string",
"description": "Service ID or name to check (e.g. 'github', 'aws', 'stripe')"
}
},
"required": ["service"]
}
},
{
Comment on lines +68 to +69
"name": "check_multiple",
"description": "Check the status of multiple services in parallel",
"inputSchema": {
"type": "object",
"properties": {
"services": {
"type": "array",
"items": {"type": "string"},
"description": "List of service IDs or names to check"
}
},
"required": ["services"]
}
},
{
"name": "list_services",
"description": "List all 141 tracked services with their IDs and categories",
"inputSchema": {
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "Optional category filter (e.g. 'cloud', 'ai', 'payments')"
}
}
}
}
],
Comment on lines +96 to +97
"prompts": [],
"resources": [],
"is_official": false
}
Loading