Help us improve
Share bugs, ideas, or general feedback.
From platform
Uploads files as ClosedLoop artifacts (PRDs, implementation plans, templates) via Python script or MCP fallback without consuming conversation context. Supports project selection and new versions.
npx claudepluginhub closedloop-ai/claude-plugins --plugin platformHow this skill is triggered — by the user, by Claude, or both
Slash command
/platform:upload-artifactThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Upload file content as a ClosedLoop MCP artifact. Two modes:
Finalizes documentation and project metadata for an MCP server after implementation is complete. Audits surface area, updates README and agent protocol files.
Finalizes documentation and project metadata for MCP servers after implementation is complete. Audits surface area, updates README and agent protocol files.
Finalizes documentation and project metadata for MCP servers before release. Audits surface area, updates README and agent protocols, and ensures consistency.
Share bugs, ideas, or general feedback.
Upload file content as a ClosedLoop MCP artifact. Two modes:
Script mode (preferred) — uses a standalone Python script that reads the
file and calls MCP directly over Streamable HTTP. No conversation context
consumed for file content. Requires a CLOSEDLOOP_API_KEY in .env.local.
MCP fallback — reads the file into context and calls mcp__closedloop__create-artifact
directly. Uses Claude Code's existing MCP auth. Used when no API key is available.
Follow these steps in order:
Read .env.local and look for:
CLOSEDLOOP_API_KEY — the API key (starts with sk_live_)NEXT_PUBLIC_MCP_SERVER_URL — the MCP server URLIf both exist → use script mode (Steps 2a–5a). If API key is missing → use MCP fallback (Steps 2b–5b).
Run the script with --list-projects:
uv run --with 'mcp[cli]' <base_directory>/scripts/upload_artifact.py \
--url <MCP_URL> \
--api-key <API_KEY> \
--list-projects
Parse the JSON output. Extract the items array. Each item has id and name.
Use AskUserQuestion to present the projects to the user:
If only one project exists, skip the question and use it automatically.
Use AskUserQuestion to collect any parameters the user hasn't already specified:
Only ask for parameters the user hasn't already specified. For example, if they said "upload /tmp/my-prd.txt as a PRD", you already have the file path and type — only ask for the title.
uv run --with 'mcp[cli]' <base_directory>/scripts/upload_artifact.py \
--url <MCP_URL> \
--api-key <API_KEY> \
--file <FILE_PATH> \
--title "<TITLE>" \
--type <TYPE> \
--project-id <PROJECT_ID>
Add --verify if the user requested verification or if testing limits.
Add --artifact-id <ID> instead of --title/--type/--project-id when
creating a new version of an existing artifact.
Parse the JSON output and report to the user:
--verify was used)Call mcp__closedloop__list-projects to get available projects.
Use AskUserQuestion to let the user pick a project (skip if only one).
Same as Step 3a — use AskUserQuestion for any missing file_path, title, or type.
Read the file content with the Read tool, then call:
mcp__closedloop__create-artifact for new artifacts (pass title, type,
content, and projectId)mcp__closedloop__create-artifact-version for new versions (pass artifactId
and content)Note: the file content will be loaded into conversation context in this mode.
Report the artifact ID and confirmation from the MCP tool response.
| Flag | Required | Description |
|---|---|---|
--url | No | MCP server URL (default: http://localhost:3010/mcp) |
--api-key | Yes | ClosedLoop API key (sk_live_...) |
--list-projects | No | List projects and exit |
--file | Upload | Path to content file |
--title | Create | Artifact title |
--type | Create | PRD, IMPLEMENTATION_PLAN, or TEMPLATE |
--project-id | No | Project association |
--workstream-id | No | Workstream association |
--artifact-id | Version | Existing artifact ID for new version |
--verify | No | Fetch back after upload and compare lengths |