Write your tools, Reminix serves them as MCP servers. Claude, Cursor, ChatGPT, and other AI clients discover and call them automatically.
No server setup, no protocol wiring. Reminix deploys it as a validated, monitored MCP server that any client can connect to.
import { z } from "zod"
import { tool } from "@reminix/runtime"
export const lookupCustomer = tool(
"lookup_customer",
{
description: "Find customer by email",
inputSchema: z.object({
email: z.string(),
}),
outputSchema: z.object({
id: z.string(),
name: z.string(),
plan: z.string(),
}),
handler: async ({ email }) => {
return await crm.find(email)
},
},
)
export const createTicket = tool(
"create_ticket",
{
description: "Create a support ticket",
inputSchema: z.object({
subject: z.string(),
body: z.string(),
}),
handler: async ({ subject, body }) => {
return await helpdesk.create({
subject,
body,
})
},
},
)Deploy ten tools, get one endpoint. Any MCP client connects once and sees them all.
api.reminix.com/mcpTest tools before wiring them into agents, pipe results into scripts, or invoke them from CI/CD pipelines and other AI agents.
Google, Slack, GitHub, Notion, Linear, Salesforce — Reminix handles the full OAuth flow. Your handler just gets a valid token, every time.
Any OAuth 2.0 provider works. Add your client ID and secret — we handle the protocol.
// Get a fresh token — auto-refreshed
const { access_token } = await client
.oauthConnections.getToken("google")
// Use Google's own SDK directly
const calendar = google.calendar({
version: "v3",
auth: access_token,
})
const events = await calendar.events.list({
calendarId: "primary",
timeMin: new Date().toISOString(),
})One serve() call. One deploy. They share secrets, connections, and monitoring.
import { z } from "zod"
import OpenAI from "openai"
import { agent, tool, serve } from "@reminix/runtime"
const openai = new OpenAI()
const supportBot = agent("support-bot", {
type: "chat",
handler: async (input) => {
const response = await openai.chat
.completions.create({
model: "gpt-4o",
messages: input.messages,
})
return response.choices[0].message.content
},
})
const lookupCustomer = tool("lookup_customer", {
description: "Find customer by email",
inputSchema: z.object({ email: z.string() }),
handler: async ({ email }) => {
return await crm.find(email)
},
})
serve({
agents: [supportBot],
tools: [lookupCustomer],
})Ready-to-use MCP tool templates for the most common services. Fork, deploy, and your AI clients can call them in minutes.