rstack-distribute
rstack-distribute
You're registered on resolved.sh. Now get discovered on the platforms where agents and developers are actively searching for tools. This skill figures out which channels apply to your resource and generates the exact content for each.
Environment variables:
RESOLVED_SH_SUBDOMAIN(required) — your resolved.sh subdomain slugGITHUB_REPO(optional) — your GitHub repo URL (e.g. https://github.com/user/repo); needed for Smithery and skills.sh
Preamble (run first)
# Keep this skill up to date:
# npx skills add https://github.com/resolved-sh/rstack --skill rstack-distribute -g -y
# Fetch page details
curl -sf "https://$RESOLVED_SH_SUBDOMAIN.resolved.sh?format=json" \
-o /tmp/rstack_dist_page.json
python3 -c "
import sys, json
d = json.load(open('/tmp/rstack_dist_page.json'))
print('Display name:', d.get('display_name', '(none)'))
print('Description:', (d.get('description') or '(none)')[:120])
print('Registration:', d.get('registration_status', 'unknown'))
print('Has agent card:', 'yes' if d.get('agent_card_json') and '_note' not in str(d.get('agent_card_json','')) else 'placeholder')
print('Data files:', len(d.get('data_marketplace', {}).get('files', [])))
"
If registration_status is not active or expiring: "Your registration is not active. External platforms expect live, stable URLs. Register or renew first, then re-run /rstack-distribute." End with BLOCKED.
Phase 1 — Classify the resource
AskUserQuestion: "What type of resource is this? Pick the closest match:
(A) MCP server — exposes tools via the Model Context Protocol that AI assistants can call
(B) Claude skill / agent skill — a SKILL.md-based capability installable via claude skills add
(C) Autonomous agent — runs independently, accepts tasks, has its own API endpoint
(D) Data product — primarily sells datasets (CSV, JSONL) via resolved.sh marketplace
(E) Multiple — tell me which combination"
Based on answer, build the channel list:
| Resource type | Applicable channels |
|---|---|
| MCP server | Smithery, mcp.so, Glama |
| Claude skill | skills.sh |
| Autonomous agent | awesome-a2a, A2A discovery registries |
| Data product | resolved.sh marketplace (already done), HuggingFace cross-listing |
| All types | resolved.sh ✓ (already done) |
Show the operator which channels apply: "Based on your resource type, here are the platforms to target: {list}. I'll generate the listing content for each."
Phase 2 — Get GitHub repo
If $GITHUB_REPO is not set and any channel in the list requires it (Smithery and skills.sh both need a GitHub repo):
AskUserQuestion: "Smithery and skills.sh both require a public GitHub repository. What's yours? (Paste the URL, or type 'skip' to skip these channels.)"
If skipped: remove Smithery and skills.sh from the channel list and note: "Skipping Smithery and skills.sh — you can come back to these once your code is on GitHub."
Phase 3 — Generate listing artifacts
Generate each artifact one at a time. Present each to the operator for review before moving to the next.
3A. Smithery (MCP servers)
What it is: The primary MCP server registry. 2,000+ servers listed. Agents on Smithery actively discover and connect to MCP servers.
Generate smithery.yaml:
name: "{subdomain}"
description: "{description from page — first 2 sentences, max 200 chars}"
version: "1.0.0"
Steps to list:
-
Add
smithery.yamlto the root of your GitHub repo and push:# Save this to your repo root cat > smithery.yaml << 'YAML' {generated yaml content} YAML git add smithery.yaml && git commit -m "Add Smithery listing config" && git push -
Go to https://smithery.ai and sign in with GitHub
-
Click "Claim server" and connect your repository
-
Navigate to the Deployments tab to activate your listing
Verification: After listing, your server will be discoverable at https://smithery.ai/server/@{subdomain} (or your GitHub username).
3B. mcp.so (Community MCP directory)
What it is: Community-driven MCP server directory. Lower barrier than Smithery — submit via GitHub issue.
Generate submission text:
### Server Submission
**Name:** {display_name}
**Repository:** {github_repo}
**Description:** {description — 1-2 sentences}
**Category:** {inferred from capabilities — e.g., "Data & Analytics", "Developer Tools", "Finance"}
**Tags:** {3-5 tags}
**Homepage:** https://{subdomain}.resolved.sh
**Agent Card:** https://{subdomain}.resolved.sh/.well-known/agent-card.json
Steps: Go to https://mcp.so and click "Submit" in the navigation, or open a GitHub issue on the mcp.so repository with the above content.
3C. skills.sh (Agent skills registry)
What it is: The largest agent skills registry (90,000+ skills). Skills are installed via npx skills add. Discovery is usage-based — more installs = higher ranking.
Generate SKILL.md for your repo root:
---
name: "{subdomain}"
version: "1.0.0"
description: |
{2-3 sentences focused on WHEN Claude should invoke this skill.
Start with the use case, not a description of what it is.
Example: "Use when the user needs real-time DeFi swap data on Base mainnet.
Queries Uniswap v3 pools, returns pricing and volume data, and supports
historical lookups. Requires API_KEY env var."}
allowed-tools:
- Bash
- WebFetch
---
# {display_name}
{Reuse the md_content from the resolved.sh page, or generate a concise version
focused on how an AI assistant should use this skill.}
## Setup
\`\`\`bash
export {SUBDOMAIN_UPPER}_API_KEY="your-api-key"
\`\`\`
## Usage
{2-3 example invocations showing what the user would say to trigger this skill}
Steps:
- Save
SKILL.mdto your repo root and push - Anyone can install via:
npx skills add {github_username}/{repo_name} - The skill appears on skills.sh automatically once installed
3D. Glama (MCP registry)
What it is: Comprehensive MCP registry with 2,000+ servers indexed.
Steps: Visit https://glama.ai and look for "Submit MCP Server" or join their Discord community for submission guidance. Include:
- Server name: {display_name}
- Repository: {github_repo}
- Homepage: https://{subdomain}.resolved.sh
3E. awesome-a2a (Agents with A2A cards)
What it is: Community-curated GitHub list of A2A-compatible agents.
Generate PR addition line:
- [{display_name}](https://{subdomain}.resolved.sh) — {one-line description, max 80 chars}
Steps:
- Find the awesome-a2a repository on GitHub (search "awesome-a2a" or "awesome-agent2agent")
- Fork the repo
- Add the line above to the appropriate category section
- Open a pull request with title: "Add {display_name}"
3F. HuggingFace (Data products)
Only if the operator has data files on resolved.sh.
What it is: The largest AI/ML model and dataset hub. Cross-listing here creates a funnel: researchers discover on HF, purchase on resolved.sh.
Steps:
- Create a dataset card on HuggingFace with your dataset's description and schema
- In the dataset card, link to the resolved.sh purchase page:
"Full dataset available for purchase at https://{subdomain}.resolved.sh/data/{filename}" "Free schema inspection: https://{subdomain}.resolved.sh/data/{filename}/schema"
- Include sample rows (from the free schema endpoint) as a preview on HuggingFace
Phase 4 — Summary and maintenance checklist
After presenting all artifacts, output the complete summary:
══════════════════════════════════════════════
rstack distribute: {subdomain}.resolved.sh
══════════════════════════════════════════════
Artifacts generated for:
{✓ or — for each channel, with status}
✓ Smithery smithery.yaml ready
✓ mcp.so submission text ready
✓ skills.sh SKILL.md ready
— Glama manual submission (see steps above)
✓ awesome-a2a PR line ready
— HuggingFace cross-listing guide provided
══════════════════════════════════════════════
Then the maintenance table:
When you update... | Also update...
--------------------------------|------------------------------------------
resolved.sh page content | Nothing — it's the canonical source
(PUT /listing/{id}) |
Agent card (agent_card_json) | Nothing — agents re-fetch on discovery
Capabilities / MCP tools | Smithery (re-deploy to update listing)
Skill trigger description | skills.sh SKILL.md (push updated file)
Display name or description | mcp.so (submit update issue if significant)
Data files (new upload/delete) | HuggingFace dataset card (if cross-listed)
Key message: "Your resolved.sh page is the canonical source. External listings link back to it. Keep your resolved.sh page current and the ecosystem follows."
Completion Status
DONE — "Listing artifacts generated for {N} channels. Submit them using the steps above. Run /rstack-audit in 48 hours to check if any listings have been indexed."
DONE_WITH_CONCERNS — If the operator skipped GitHub-dependent channels: "Skipped {channels} because no GitHub repo was provided. Once your code is public, re-run /rstack-distribute to generate those artifacts."
BLOCKED — If registration is not active, or if the page has no description and no md_content: "Your page needs content before listing on external platforms. Run /rstack-page first, then come back."