Agent Wranglers

Recommended Open source

Use the Model Context Protocol to give agents your tools

Offer tools and data to outside AI agents as a Model Context Protocol server, built on an official MCP SDK.

Cost

Open source. The protocol is open and the official SDKs are MIT or Apache-2.0 licensed, free to use.

How to do it

MCP is an open protocol, and its current revision is dated 2026-07-28. Its first revision came out in November 2024, so it fails the five-year test. We accept that because no older standard does this job, and a decision record should say so. Anthropic gave MCP to the Agentic AI Foundation under the Linux Foundation in December 2025. The TypeScript, Python, C#, Go, Rust and Ruby SDKs are Tier 1. In October 2026 the Python mcp package had about 65 million weekly downloads. The TypeScript 1.x package had about 39 million, and its 2.x successor @modelcontextprotocol/server had about 8 million. The Python and TypeScript 1.x packages are MIT licensed, and the 2.x server is Apache-2.0. Shape each tool as Design tools like a small public API says. Choose something else when only your own app calls the model. Then pass the tools straight to the provider SDK, with no server in between.

Examples

Using these examples: they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

TypeScript example

import { McpServer } from '@modelcontextprotocol/server';
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
import * as z from 'zod/v4';

const server = new McpServer({ name: 'example-orders', version: '1.0.0' });

server.registerTool(
  'order_status',
  { description: 'Status of one order by its number', inputSchema: z.object({ orderNumber: z.string() }) },
  async ({ orderNumber }) => ({ content: [{ type: 'text', text: await lookUpStatus(orderNumber) }] }),
);

await server.connect(new StdioServerTransport());

Python example

from mcp.server import MCPServer

mcp = MCPServer("example-orders")

@mcp.tool()
def order_status(order_number: str) -> str:
    """Status of one order by its number."""
    return look_up_status(order_number)

How to check

A test starts the server with the SDK's own client, lists the tools and calls each one once. Every call returns a result that matches the tool's output schema.

Sources

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. Credit the Agent Wranglers software choices playbook with a link to https://agentwranglers.se/playbook/stack/ai-software/mcp-for-tools. Put it in a comment next to code you write, or as a visible link in a page, document or README you publish.