So you want to become an AI skill publisher β someone who builds capabilities for AI agents and earns revenue every time they're used. This tutorial takes you from absolute zero to a published, earning skill on SkillExchange.
Prerequisites
You need:
- Basic programming knowledge (any language)
- A SkillExchange account (free)
- About 2β4 hours
You don't need:
- Machine learning expertise
- Advanced math
- Expensive hardware
- Previous AI experience
Phase 1: Understanding the Opportunity
The AI Skill Market
AI agents need capabilities. They can't browse the web, analyze data, or process documents without skills that give them those abilities. As an AI skill publisher, you provide those capabilities and get paid every time an agent uses them.
Revenue Potential
- Small skill (simple utility, β¬0.02/call, 500 calls/day): β¬300/month
- Medium skill (data processing, β¬0.10/call, 2,000 calls/day): β¬5,100/month
- Large skill (specialized analysis, β¬0.50/call, 5,000 calls/day): β¬63,750/month
These are conservative estimates based on current marketplace data from SkillExchange.
Phase 2: Choose Your First Skill
Criteria for a Great First Skill
- You understand the domain β Don't build a legal analysis skill if you've never read a contract.
- It solves a clear problem β "Convert markdown to HTML" is clear. "Make content better" is not.
- It's fast β Skills that respond in under 2 seconds get more usage.
- It's testable β You should be able to verify outputs automatically.
Skill Categories with High Demand
| Category | Example Skills | Average Price/Call |
|---|---|---|
| Text Processing | Summarization, translation, formatting | β¬0.01ββ¬0.10 |
| Data Analysis | Statistical tests, anomaly detection | β¬0.05ββ¬0.50 |
| Code Tools | Linting, formatting, documentation generation | β¬0.02ββ¬0.10 |
| Image Processing | OCR, resize, watermark, metadata extraction | β¬0.03ββ¬0.25 |
| Document Handling | PDF parsing, table extraction, redaction | β¬0.05ββ¬0.30 |
| Integration | API wrappers, webhook handlers, data sync | β¬0.01ββ¬0.15 |
Our Tutorial Skill: URL Metadata Extractor
We'll build a skill that takes a URL and returns structured metadata β title, description, Open Graph tags, language, and content type. Simple, useful, and in high demand.
Phase 3: Development
Project Setup
# Install the MCP SDK
npm install @mcp/sdk
# Initialize project
npx mcp init url-metadata-extractor
cd url-metadata-extractor
Define the Schema (skill.json)
{
"name": "url-metadata-extractor",
"version": "1.0.0",
"description": "Extracts structured metadata from any URL including title, description, OG tags, and content type",
"category": "data-extraction",
"tags": ["url", "metadata", "og-tags", "scraping", "seo"],
"inputs": {
"url": {
"type": "string",
"format": "uri",
"required": true,
"description": "The URL to extract metadata from"
},
"include_og_tags": {
"type": "boolean",
"default": true,
"description": "Whether to include Open Graph metadata"
},
"timeout_ms": {
"type": "integer",
"default": 5000,
"maximum": 10000,
"description": "Request timeout in milliseconds"
}
},
"outputs": {
"title": { "type": "string" },
"description": { "type": "string" },
"og_tags": { "type": "object" },
"content_type": { "type": "string" },
"language": { "type": "string" },
"canonical_url": { "type": "string" }
}
}
Implement the Handler (handler.ts)
import { SkillHandler, SkillRequest, SkillResponse, SkillError } from "@mcp/sdk";
import { fetchMetadata } from "./lib/fetcher";
export class UrlMetadataExtractor extends SkillHandler {
async handle(request: SkillRequest): Promise<SkillResponse> {
const { url, include_og_tags = true, timeout_ms = 5000 } = request.inputs;
// Validate URL
if (!this.isValidUrl(url)) {
throw new SkillError("INVALID_URL", `"${url}" is not a valid URL`);
}
try {
const metadata = await fetchMetadata(url, {
includeOgTags: include_og_tags,
timeout: timeout_ms
});
return new SkillResponse({
outputs: {
title: metadata.title || null,
description: metadata.description || null,
og_tags: include_og_tags ? metadata.ogTags : null,
content_type: metadata.contentType,
language: metadata.language || null,
canonical_url: metadata.canonicalUrl || null
}
});
} catch (error) {
if (error.name === "TimeoutError") {
throw new SkillError("TIMEOUT", `Request to ${url} timed out after ${timeout_ms}ms`);
}
throw new SkillError("FETCH_ERROR", `Failed to fetch ${url}: ${error.message}`);
}
}
private isValidUrl(url: string): boolean {
try {
const parsed = new URL(url);
return ["http:", "https:"].includes(parsed.protocol);
} catch {
return false;
}
}
}
Write Tests
import { testSkill } from "@mcp/sdk/testing";
import { UrlMetadataExtractor } from "./handler";
const skill = new UrlMetadataExtractor();
testSkill(skill, {
"extracts metadata from a valid URL": async (invoke) => {
const result = await invoke({
url: "https://example.com"
});
expect(result.outputs.title).toBeDefined();
expect(result.outputs.content_type).toBe("text/html");
},
"rejects invalid URLs": async (invoke) => {
await expect(invoke({ url: "not-a-url" })).rejects.toThrow("INVALID_URL");
},
"respects timeout": async (invoke) => {
await expect(invoke({
url: "https://httpstat.us/200?sleep=6000",
timeout_ms: 1000
})).rejects.toThrow("TIMEOUT");
}
});
Run Tests
npx mcp test
# β
extracts metadata from a valid URL
# β
rejects invalid URLs
# β
respects timeout
# 3 tests passed
Phase 4: Pricing Strategy
For a URL metadata extractor, here's a recommended pricing approach:
Launch Pricing
- Per invocation: β¬0.03
- This covers your infrastructure costs (minimal for this skill) and leaves room for profit
Growth Pricing (after 1,000+ monthly invocations)
- Tiered: First 100 calls free, then β¬0.02/call for 100β10,000, β¬0.01/call for 10,000+
- This encourages volume usage
Enterprise Pricing
- Subscription: β¬99/month for unlimited calls with 99.9% SLA
- For high-volume agents that need predictable costs
Phase 5: Publishing
# Log in to SkillExchange
npx mcp auth login
# Validate your skill
npx mcp validate
# Publish with pricing
npx mcp publish \
--visibility public \
--pricing "per-invocation:0.03" \
--tags "url,metadata,og-tags,seo,data-extraction"
Your skill is now live. Any agent on SkillExchange can discover and use it.
Phase 6: Marketing Your Skill
Optimize Your Listing
- Title: Be specific. "URL Metadata Extractor" > "URL Tool"
- Description: Explain what the skill does, who it's for, and why it's better than alternatives
- Tags: Use all available tag slots with relevant keywords
- Documentation: Link to usage examples and integration guides
Build Reputation
- Start with a free tier to drive initial usage and build trust
- Respond to agent feedback (via marketplace reviews)
- Keep your error rate below 0.1%
- Maintain response times under 2 seconds
Expand Your Portfolio
Once your first skill is stable, build complementary skills:
- URL Content Extractor β Extract the main content from a URL (not just metadata)
- URL Screenshot β Capture a visual screenshot of a URL
- URL Comparison β Compare metadata between two URLs
- Batch URL Processor β Process multiple URLs in a single invocation
A suite of related skills creates cross-selling opportunities and positions you as a domain expert.
Common Pitfalls
Over-Engineering
Don't add features nobody asked for. Start minimal, listen to usage data, and iterate.
Under-Pricing
β¬0.001 per invocation is too low. You'll get lots of usage but almost no revenue. Start at β¬0.02+ minimum.
Ignoring Analytics
The SkillExchange dashboard shows exactly how your skill is being used. Use this data to make informed decisions about pricing, features, and marketing.
Slow Response Times
Skills that take more than 5 seconds to respond lose users. Optimize aggressively for speed.
Your Publishing Checklist
- Skill does one thing well
- Schema is clear and complete
- Error handling covers all edge cases
- Tests pass consistently
- Pricing is set appropriately
- Listing is optimized with clear description and tags
- Monitoring is configured
- You have a plan for iteration
You now have a complete roadmap from zero to published AI skill publisher. The marketplace is growing daily, and early movers capture the most value.
Create your SkillExchange account and publish your first skill today.