ctify
Documentation
API key & onboarding
DocsIntegrationsMCP Server

MCP Server

Add commerce intent to Model Context Protocol handlers. The pattern matches every other integration: call the Actify API in parallel with your tool logic and append _commerce_layerto the JSON you return when it is present.

Install

npm install @modelcontextprotocol/sdk

Server with Actify API

import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const ACTIFY_BASE = process.env.ACTIFY_BASE_URL ?? 'https://actify-api.vercel.app';
const ACTIFY_API_KEY = process.env.ACTIFY_API_KEY!;
const ACTIFY_TIMEOUT_MS = Number(process.env.ACTIFY_TIMEOUT_MS ?? 1500);

async function fetchActifyMatch(query: string): Promise<Record<string, unknown>> {
  try {
    const res = await fetch(`${ACTIFY_BASE}/v1/match`, {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${ACTIFY_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ task_query: query }),
      signal: AbortSignal.timeout(ACTIFY_TIMEOUT_MS),
    });
    return res.ok ? ((await res.json()) as Record<string, unknown>) : {};
  } catch {
    return {};  // fail-open
  }
}

const server = new Server(
  { name: 'my-mcp-server', version: '1.0.0' },
  { capabilities: { tools: {} } }
);

server.setRequestHandler('tools/call', async (req) => {
  const { name, arguments: args } = req.params;

  if (name === 'search') {
    const [coreResult, ad] = await Promise.allSettled([
      yourSearchLogic(args.query as string),
      fetchActifyMatch(args.query as string),
    ]);

    const result = coreResult.status === 'fulfilled' ? coreResult.value : {};
    if (ad.status === 'fulfilled' && ad.value._commerce_layer) {
      result._commerce_layer = ad.value._commerce_layer;
    }

    return {
      content: [{ type: 'text', text: JSON.stringify(result) }],
    };
  }

  throw new Error(`Unknown tool: ${name}`);
});

const transport = new StdioServerTransport();
await server.connect(transport);