Ship MCP tools
AI clients can call.

Write your tools, Reminix serves them as MCP servers. Claude, Cursor, ChatGPT, and other AI clients discover and call them automatically.

A handler and a schema. That's it.

No server setup, no protocol wiring. Reminix deploys it as a validated, monitored MCP server that any client can connect to.

  • Served via MCP — the protocol AI clients use to discover and call tools
  • Inputs and outputs validated against your schema
  • Zero-config discovery — deploy and it's live
tools/crm.ts
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,
      })
    },
  },
)

One endpoint. Every tool discoverable.

Deploy ten tools, get one endpoint. Any MCP client connects once and sees them all.

MCPapi.reminix.com/mcp

Or call tools from your terminal.

Test tools before wiring them into agents, pipe results into scripts, or invoke them from CI/CD pipelines and other AI agents.

Terminal
# Call a tool with input
$reminix tool call lookup_customer \
-i '{"email": "user@example.com"}'
# List available tools
$reminix tool list

Connect to 20+ services.

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.

using-connections.ts
// 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(),
})

Agents and tools, same project.

One serve() call. One deploy. They share secrets, connections, and monitoring.

index.ts
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],
})

Your AI is only as good as what it can reach.

Deploy your first tool in five minutes. Start free — no credit card required.