Back to Blog

From Zero to AI Skill Publisher: Complete Tutorial

Ultrion TeamMay 23, 202615 min read

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

  1. You understand the domain β€” Don't build a legal analysis skill if you've never read a contract.
  2. It solves a clear problem β€” "Convert markdown to HTML" is clear. "Make content better" is not.
  3. It's fast β€” Skills that respond in under 2 seconds get more usage.
  4. 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.

Related Articles

Ready to try AI skills?

Browse the marketplace and discover skills for your AI agents.

Browse Skills