Expose MCP tools for LLMs
20 stars
Go
Updated Oct 16, 2025
Documentation
---
title: Expose
description: Easily build MCP tools for Claude desktop app
---
Expose lets you build MCP tools that you can invoke with MCP client like Claude desktop app.
- Self-hosted: You can easily self-host tools and deploy them on your own server.
- Unified gateway: Generates a single HTTP endpoint that you can register with
expose-cli - Flexible: Easily configure and customize your tools to fit your needs.
Getting started
1. Setup expose CLI
bash
curl -fsSL https://github.com/a0dotrun/expose/releases/download/stable/download_cli.sh | bash2. Install dependencies
bash
npm i @a0dotrun/expose3. Create server
bash
touch src/server.tsts title=src/server.ts
import { create } from "@a0dotrun/expose"
const app = create({
tools: [],
})
export default {
port: 3000,
fetch: app.fetch,
}4. Define your tools
diff lang=ts title=src/server.ts
+ import { tool } from "@a0dotrun/expose/tool"
+ import { subscription } from "@acme/lib/subscription"
+ import { z } from "zod"
+ const getCustomerSubscription = tool({
+ name: "getCustomerSubscription",
+ description: "Get subscription information for a customer",
+ args: z.object({
+ customer: z.string().uuid()
+ }),
+ run: async (input) => {
+ // Your subscription logic here
+ return input;
+ },
+ });
+ const createCustomerSubscription = tool({
+ name: "createCustomerSubscription",
+ description: "Create a subscription for a customer",
+ args: z.object({
+ customer: z.string().uuid()
+ }),
+ run: async (input) => {
+ // Your subscription logic here
+ return input;
+ },
+ });
const app = create({
tools: [
+ getCustomerSubscription,
+ createCustomerSubscription,
],
});5. Start server
bash
npm run devYou can also deploy the server and note down the public URL.
6. Register in Claude desktop app
MACOS Claude desktop MCP config path: ~/Library/Application Support/Claude/claude_desktop_config.json
json
{
...
"mcpServers": {
"subscriptionManager": {
"command": "/Users/acmeuser/.local/bin/expose-cli",
"args": ["--url", "http://localhost:3000", "--timeout", "15"]
}
}
...
}_replace localhost with your public URL_
---
expose is created by @\_sanchitrk at a0
Acknowledgements
I was inspired by opencontrol
Similar MCP
Based on tags & features
Trending MCP
Most active this week