🥞PancakeJS

Publishing Apps

Once your app is built and tested, you can distribute it to users through AI host directories.

Distribution Channels

Claude Desktop

Claude Desktop uses MCP servers. Users add your server URL to their config:

{
  "mcpServers": {
    "your-app": {
      "url": "https://your-app.example.com/mcp"
    }
  }
}

Currently, there's no centralized app store for MCP servers. Distribution happens through:

  • Your website
  • Documentation
  • Social media
  • Developer communities

ChatGPT

ChatGPT supports custom actions in GPTs. To distribute:

  1. Create a Custom GPT
  2. Add your app as an action using the OpenAPI spec
  3. Publish the GPT (public, with link, or private)

Public GPTs appear in the GPT Store and can reach millions of users.

Preparation Checklist

Before distributing your app:

Technical

  • Deploy to production (see Deployment)
  • Set up HTTPS with valid certificates
  • Configure CORS properly
  • Test with real AI clients

Documentation

  • Write clear installation instructions
  • Document what the app does
  • Provide example prompts
  • List available views and actions
  • Privacy policy
  • Terms of service
  • Support contact

MCP Server Distribution

Deploy Your Server

Deploy to a production host with a stable URL:

# Example: Deploy to your domain
https://my-app.example.com

See Deployment for options.

Create Installation Instructions

## Install My App

Add to your Claude Desktop config:

**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`

\`\`\`json
{
  "mcpServers": {
    "my-app": {
      "url": "https://my-app.example.com/mcp"
    }
  }
}
\`\`\`

Restart Claude Desktop after saving.

Share Your App

Share your app through your GitHub repo README, your website, developer forums, and social media.

ChatGPT GPT Distribution

Create a Custom GPT

Go to chat.openai.com, click your profile, then My GPTs, then Create a GPT.

Add Your Action

In the GPT builder, click Configure then Add actions. Import from URL: https://your-app.example.com/.well-known/openai-plugin.json. Test the action in the preview.

Configure the GPT

Add a name and description. Write instructions for how the GPT should use your actions. Add example conversation starters.

Publish

Choose visibility: Only me (private), Anyone with a link (share via URL), or Public (listed in GPT Store). Public GPTs require a verified builder profile.

Best Practices

Write Clear Descriptions

Your view and action descriptions help AI understand when to use them:

// Good
description: 'Search products by name, category, or price range. Returns matching products with images, prices, and availability.'

// Bad
description: 'Product search'

Provide Example Prompts

Help users understand what your app can do:

## Example Prompts

- "Find laptops under $1000"
- "Show me the weather in Tokyo"
- "Book a table for 4 at an Italian restaurant"

Handle Errors Gracefully

Return helpful error messages:

handler: async ({ productId }) => {
  const product = await getProduct(productId);

  if (!product) {
    throw new Error(`Product ${productId} not found`);
  }

  return product;
}

Test Thoroughly

Before publishing:

  • Test all views and actions
  • Verify error handling
  • Check theme support (light/dark)
  • Test on different screen sizes

Monitoring

Track how your app is used:

Server Logging

const app = createApp({
  config: {
    debug: true, // Enable in development
  },

  middleware: [
    async (ctx, next) => {
      console.log(`Tool called: ${ctx.toolName}`);
      const start = Date.now();
      await next();
      console.log(`Completed in ${Date.now() - start}ms`);
    },
  ],
});

Analytics

Add analytics to your server:

handler: async (input) => {
  // Track usage
  await analytics.track('view_invoked', {
    view: 'product-search',
    params: input,
  });

  return result;
}

Next Steps

On this page