KinToolkit Developer Guide: MCP Label References
Connect to the public KinToolkit MCP server, discover supported bottles and label bands, and preserve label directions, limits and sources.
Updated: September 24, 2026
When to use KinToolkit
Use this service to discover supported US liquid medicine bottles, retrieve one published label row, or cite its public reference URL. The service covers five bottles and 20 canonical label rows. It does not determine whether a medicine or amount is suitable for a particular child.
Educational US liquid medicine label lookup, not a personalized prescription. Use only an exact listed bottle, concentration and published label band. Never send names, exact measurements, medical history or other patient details. Do not interpolate, convert concentrations or infer that a label reference is safe for a particular child. Preserve the age restrictions, directions, maximum and source together; verify the full package label and ask a clinician when unsure.
Connect
MCP endpoint: https://kintoolkit.com/api/mcp. Transport: Streamable HTTP. This is a public, stateless service: no account, API key, OAuth grant or persistent session is required. Use a compatible MCP client to initialize, list tools and call tools.
The server supports MCP protocol negotiation, including 2025-11-25. The SDK handles protocol headers and message metadata. Calls use HTTP POST; a standalone GET or DELETE returns 405 because this service does not provide a persistent SSE subscription or session deletion.
Use a server or local client. Requests with an untrusted Origin are rejected; cross-origin browser access to the MCP endpoint is not enabled.
Codex CLI
Run these commands in your terminal to register the remote server and inspect its configuration. No bearer token or MCP login is needed. Start a new Codex session after adding it.
codex mcp add kintoolkit --url https://kintoolkit.com/api/mcp
codex mcp get kintoolkitClaude custom connector
In Claude, open Customize > Connectors, choose + then Add custom connector, and enter KinToolkit with the remote MCP URL https://kintoolkit.com/api/mcp. Leave OAuth client credentials empty. Add the connector, then enable it for the conversation through the + menu > Connectors.
For a Team or Enterprise organization, an owner first adds the endpoint in Organization settings > Connectors > Add > Custom > Web. Members can then connect and enable it. Claude remote connectors reach the endpoint from Anthropic infrastructure, so users may share the same network rate limit.
Claude Code
Run these commands from the project where you want the server. Local scope keeps the connection private to you and limits it to that project; it does not make the remote server run locally. The get command checks the connection. In a Claude Code session, /mcp shows server status and tools.
claude mcp add --transport http --scope local kintoolkit https://kintoolkit.com/api/mcp
claude mcp get kintoolkitCursor
Merge this entry into .cursor/mcp.json in your project. Use ~/.cursor/mcp.json instead if you want the connection available across your projects. Keep any existing mcpServers entries. Cursor supports the remote HTTP URL directly; no local bridge or authentication headers are needed. Review and enable the server and its tools in Cursor.
{
"mcpServers": {
"kintoolkit": {
"url": "https://kintoolkit.com/api/mcp"
}
}
}Verify your connection
Ask your client to use KinToolkit to list supported bottles and public label-band identifiers. It should expose list_calculator_bottles and get_label_directions. A successful connection is not a medical assessment; never provide a child’s personal details to these tools.
Client organization policies may control whether custom servers are available. These manual setup instructions do not imply a listing or endorsement in any client’s directory.
KinToolkit CLI
The official KinToolkit CLI requires Node.js 24 or newer. Install the versioned package directly from this website, then list bottles or look up a public label row. It prints the complete structured result, including limitations and sources, and exits unsuccessfully on invalid inputs or service errors. It accepts public product, concentration and label-band identifiers only.
This direct download is available now. Publication to the npm registry is pending; do not use the bare npm package name until a registry release is announced. The CLI calls the same public MCP endpoint and shares its request limits. No login or API key is required.
npm install --global https://kintoolkit.com/downloads/kintoolkit-1.0.0.tgz
kintoolkit bottles
kintoolkit label --product-id motrin-infant --concentration "50 mg / 1.25 mL" --label-band 12-17-lbPublic API and OpenAPI
GET /api/catalog.json returns calculator and label-reference URLs, Markdown alternatives, sources and MCP connection information. POST /api/mcp accepts MCP JSON-RPC messages; use an MCP client for protocol setup and tool calls. Both endpoints are public: no registration, account, API key or OAuth is required.
The OpenAPI 3.1 document describes these existing HTTP operations with unique operation IDs, typed inputs and response schemas. MCP tool schemas come directly from the runtime definitions. For model function calling, use the MCP tools and preserve their complete results; the HTTP message operation is not a standalone dose function.
The catalog, CLI bottles command and Quickstart below are safe ways to try the service with public reference identifiers. There is no separate sandbox or account data to create.
curl -sS https://kintoolkit.com/api/catalog.json
curl -sS https://kintoolkit.com/openapi.jsonQuickstart
In a Node.js 24 project, install @modelcontextprotocol/client@^2.1.0. Save this example as an .mjs file and run it with Node. It reads a predefined public label row; it does not accept child details.
import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
const client = new Client({ name: 'label-reference-example', version: '1.0.0' });
try {
await client.connect(new StreamableHTTPClientTransport(new URL('https://kintoolkit.com/api/mcp')));
const { tools } = await client.listTools();
const bottles = await client.callTool({ name: 'list_calculator_bottles', arguments: {} });
if (bottles.isError) throw new Error('Bottle lookup failed.');
// Public label identifiers from the bottle list, never patient details.
const answer = await client.callTool({
name: 'get_label_directions',
arguments: { product_id: 'motrin-infant', concentration: '50 mg / 1.25 mL', label_band: '12-17-lb' },
});
if (answer.isError) throw new Error('Unsupported label reference. Check the bottle list.');
console.log(answer.structuredContent); // Preserve the complete reference, including limitations and source.
} finally {
await client.close();
}list_calculator_bottles
List the five supported US liquid medicine bottles, exact concentrations and public label-band identifiers. No patient inputs. Minimal operational telemetry records no tool arguments or results.
Call with an empty object. Each bottle includes its exact concentration, ingredient, source, and valid label_band identifiers with paired age/weight labels and public URLs.
Input JSON Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}get_label_directions
Look up one public label row using identifiers from list_calculator_bottles. Requires an exact bottle/concentration match. Returns label amount or ask_doctor, age and weight restrictions, full directions, source and canonical URL. Does not determine suitability for a child. Minimal operational telemetry records no tool arguments or results.
Copy all three strings from the bottle list. The enum lists describe allowed values individually; the server also validates that the product, concentration and label band belong together. Extra arguments are rejected.
Input JSON Schema
{
"type": "object",
"additionalProperties": false,
"required": [
"product_id",
"concentration",
"label_band"
],
"properties": {
"product_id": {
"type": "string",
"enum": [
"tylenol-child",
"tylenol-infant",
"motrin-child",
"motrin-infant",
"zyrtec-child"
]
},
"concentration": {
"type": "string",
"enum": [
"160 mg / 5 mL",
"100 mg / 5 mL",
"50 mg / 1.25 mL",
"1 mg / mL"
]
},
"label_band": {
"type": "string",
"enum": [
"under-24-lb",
"24-35-lb",
"36-47-lb",
"48-59-lb",
"60-71-lb",
"72-95-lb",
"under-12-lb",
"12-17-lb",
"18-23-lb",
"under-2-years",
"2-5-years",
"6-11-years"
]
}
}
}Read the complete result
Successful calls return structuredContent and a JSON copy in content[0].text. A directions result includes status, product_id, name, ingredient, concentration, label_band, weight_band, age_band, label_amount, directions, limitations, source, source_checked, source_check_note and url.
A label_reference result has a string label_amount. Preserve it as a string: some labels contain discrete alternatives. An ask_doctor result is also a successful lookup and has label_amount: null. Never turn that into zero, an estimated amount, or a personalized recommendation.
Keep the bottle concentration, paired label age and weight, directions, limits, source and canonical URL together. source_checked records source verification, not clinical review.
Errors and limits
Check result.isError after every tools/call. Invalid arguments or unsupported combinations return a tool error; HTTP 200 alone does not indicate a successful tool call. A tool error has explanatory content and no structuredContent. Use list_calculator_bottles to correct a mismatch; do not substitute another strength or interpolate.
Send one JSON-RPC message per HTTP request; batches and malformed JSON return HTTP 400. Request bodies larger than 16,384 bytes return 413. The function has a ten-second execution limit. Untrusted Origin headers return 403. Unsupported GET and DELETE operations return 405. Application-controlled protocol rejections return JSON-RPC errors with error.code, error.message and error.data containing a reason, resolution hint and documentation URL. SDK protocol errors retain their standard JSON-RPC shape. Unknown API routes return JSON error details; request Accept: application/problem+json for the problem-details media type. Unknown page requests with Accept: text/markdown retain HTTP 404 and a Markdown recovery guide. Responses are not cached. The hosting firewall limits /api/mcp to 120 HTTP requests per IP per 60-second fixed window in each region, across methods and hostnames. Excess requests return HTTP 429 before reaching the application. Shared networks or MCP providers share the same IP limit. Counters are regional, not a single worldwide quota. On 429, follow Retry-After when supplied; otherwise back off for at least 60 seconds with jitter. Do not retry immediately.
Privacy
Do not send names, exact patient ages or weights, symptoms, medical histories, free text or other personal details. The tools accept only the listed public label identifiers; they do not accept a caregiver confirmation flag.
KinToolkit does not log raw MCP request or response bodies in the application or send tool arguments or returned values to PostHog. The server and hosting provider process request bodies to answer calls; your MCP client also processes data under its own policy.
The server sends an mcp_request operational event to PostHog with only an allowlisted protocol operation or supported tool name, a technical outcome category, HTTP status, processing duration, is_test, and a random per-request event identifier. Outcome categories are success, tool_error, protocol_error, rejected, server_error, accepted, or unclassified. These records exclude medicine, concentration, label band, caller IP address, user-agent and client information, headers, referrers, and query strings. They use no persistent client identifier; IP attribution and person profiles are disabled. PostHog receives these events through the server network connection.
Hosting and security systems may process network addresses and maintain counters to detect and limit excessive traffic. Vercel processes request network information separately from these operational events. Stateless MCP means no persistent protocol session is required; it does not mean hosting security counters or operational records are absent.
Discovery and documentation
KinToolkit is published in the official MCP Registry as com.kintoolkit/label-reference. Registry publication is separate from inclusion in a client directory; use the setup instructions above to connect directly.
The ARD capability manifest uses the AI Catalog 1.0 model to describe the existing MCP card, OpenAPI schema, calculator reference catalog and agent skill, with example discovery queries. Its media types match the linked resources. The API catalog uses the RFC 9727 JSON linkset format. The MCP server card follows the experimental SEP-1649 discovery format used by current readiness checkers; it is not a finalized MCP standard. MCP initialize and tools/list responses remain authoritative for runtime capabilities and schemas.
