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:
- Create a Custom GPT
- Add your app as an action using the OpenAPI spec
- 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
Legal (for public distribution)
- 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.comSee 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;
}