Look up a customer. Send an email. Query a database. Write the handler, define the schema — Reminix serves it as an MCP server that any agent or client can discover and call.
Works with
A name, a schema, and a handler function. Deploy it and Reminix serves it as an MCP server — discoverable, validated, monitored.
Your tool is served via the Model Context Protocol. Any MCP client can connect.
Inputs validated against your JSON schema. Outputs guaranteed to match.
Any agent in the project — or any external MCP client — can discover and call your tools.
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,
})
},
},
)Your tools become a single MCP endpoint. Any agent, Claude, Cursor, or custom client can discover and call them.
api.reminix.com/mcpYour tools need to talk to external services. Reminix handles the OAuth flow, token exchange, storage, and refresh. Your handler just gets a valid token.
Create an OAuth app in Google Console, Slack API, Notion, etc. Add the client ID and secret to Reminix.
Reminix generates the auth URL, handles the callback, exchanges the code for tokens, and stores them encrypted.
Your tool handler gets a valid access token. Reminix refreshes expired tokens automatically.
// 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(),
})Any OAuth 2.0 provider works. Add your client ID and secret — we handle the protocol.
Agents and tools live in the same project. One serve() call. One reminix deploy. They share secrets, connections, and monitoring.
A single agent can use your custom CRM tool, a Google Calendar tool, and a Slack tool — all in the same conversation.
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],
})Free while in early access. No credit card required.
Or read the docs