KinToolkit

KinToolkit Developer Guide: MCP Label References

Connect to the public KinToolkit MCP server, discover supported bottles and label bands, read complete medicine question guides, and preserve directions, limits and sources.

Updated: October 22, 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 calculator bottles, 20 canonical label rows and every published medicine question guide. It does not determine whether a medicine or amount is suitable for a particular child.

Use list_question_guides and get_question_guide for educational medicine questions, comparisons, chewables and Claritin; copy only a public guide_id, never a user question. Return the complete guide with sources and safety limits. Reference-only guide products do not expand calculator support. Educational US liquid medicine label lookup, not a personalized prescription. For ordinary product names, map only the public brand, ingredient and bottle audience to find_label_references; never forward the user’s full question or patient details. Ask which bottle or formulation is meant when matches are ambiguous. Store-brand entries are reference-only, not calculator-supported substitutes. Use only an exact listed calculator bottle, concentration and published label band for get_label_directions. 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 the stateless 2026-07-28 protocol and legacy 2025-11-25 clients. Modern clients use server/discover and per-request metadata; legacy clients use initialize. 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 kintoolkit

Claude 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 kintoolkit

Cursor

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, find_label_references, get_label_directions, list_question_guides and get_question_guide. 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 version 1.1.0 from npm, then list bottles, look up a public label row, or discover and read complete question guides. It prints the complete structured result, including limitations and sources, and exits unsuccessfully on invalid inputs or service errors. It accepts only public product, concentration, label-band and guide identifiers.

A versioned archive is also available directly from this website. The CLI calls the same public MCP endpoint and shares its request limits. No login or API key is required.

npm install -g kintoolkit@1.1.0
kintoolkit bottles
kintoolkit guides
kintoolkit guide --guide-id medicine-bottle-online-chart-disagree
kintoolkit label --product-id motrin-infant --concentration "50 mg / 1.25 mL" --label-band 12-17-lb

Public 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.json

Quickstart

In a Node.js 24 project, install @modelcontextprotocol/client@^2.3.1. 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' }, { versionNegotiation: { mode: 'auto' } });
try {
  await client.connect(new StreamableHTTPClientTransport(new URL('https://kintoolkit.com/api/mcp')));
  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 all five supported US liquid medicine bottles, exact concentrations and public label-band identifiers. Use find_label_references for a named brand or ingredient. To read a listed row, pass its product_id, concentration and label_band to get_label_directions. 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

Read one printed public label row. Use exact identifiers from list_calculator_bottles or find_label_references.calculator_bottles; if already known, call directly without repeating discovery. Copy all three identifiers from the same bottle and one of its label_bands. 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"
      ],
      "description": "Exact calculator-supported product_id from the catalog or finder; never a reference_only reference_id."
    },
    "concentration": {
      "type": "string",
      "enum": [
        "160 mg / 5 mL",
        "100 mg / 5 mL",
        "50 mg / 1.25 mL",
        "1 mg / mL"
      ],
      "description": "Copy the concentration string from that same bottle, including units and spacing. Do not convert strengths."
    },
    "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"
      ],
      "description": "Copy a label_band identifier from that bottle's label_bands. This is a published row, not an exact patient age or weight."
    }
  }
}

find_label_references

Resolve ordinary public product names using bounded filters: Children’s Motrin means brand motrin and audience children; Zyrtec means brand zyrtec; generic cetirizine means ingredient cetirizine; Walmart means brand equate. Omit filters only when unspecified. An unlisted medicine or brand is unsupported; do not drop it or use an ingredient match to substitute another product. Lists matching calculator bottles and separately marked reference-only CVS, Equate and Walgreens formulations with sources. Returns clarification guidance for ambiguous matches. No free text or patient inputs. Arguments and results are excluded from operational telemetry.

Use only the schema’s brand, ingredient and bottle-audience enums. For example, Children’s Motrin becomes {"brand":"motrin","audience":"children"}; a CVS reference request becomes {"brand":"cvs"}. Omit unspecified filters, then clarify the returned bottle choices. An unlisted brand is unsupported; do not discard it to search by ingredient and substitute another product. Never pass a full user question. Reference-only entries include exact formulation, flavor, package NDC, DailyMed revision and source; they cannot be passed to get_label_directions.

Input JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "brand": {
      "type": "string",
      "enum": [
        "tylenol",
        "motrin",
        "zyrtec",
        "cvs",
        "equate",
        "walgreens"
      ],
      "description": "Public bottle brand; Walmart Equate maps to equate. Omit only when the brand is unspecified, not when it is unsupported."
    },
    "ingredient": {
      "type": "string",
      "enum": [
        "acetaminophen",
        "ibuprofen",
        "cetirizine"
      ],
      "description": "Public active ingredient. Combined filters must all match; do not discard a conflicting brand or ingredient."
    },
    "audience": {
      "type": "string",
      "enum": [
        "infants",
        "children"
      ],
      "description": "Public wording on the bottle, never a patient age."
    }
  }
}

list_question_guides

Discover every published educational question guide, including symptoms, timing, food, bottle comparisons, label charts, Zyrtec chewables and Claritin. Returns public guide_id values, descriptions, update dates and canonical HTML/Markdown links. Use get_question_guide for complete content. No search text or patient inputs. Operational telemetry excludes arguments and results.

Call with an empty object to discover every published question guide and its exact public guide_id.

Input JSON Schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

get_question_guide

Read the full published educational guide by exact public guide_id from list_question_guides. Markdown includes every paragraph, table, product/formulation distinction, source and safety limitation, identical to the website Markdown. updated is a content date, not clinical review. Chewables and Claritin remain reference-only and cannot be used with get_label_directions. No patient inputs; operational telemetry excludes arguments and results.

Copy a guide_id from list_question_guides. The markdown field and second text block contain the complete website Markdown, including all tables, product references, sources and safety boundaries. updated is a content date, not clinical review. Extra arguments are rejected.

Input JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "guide_id"
  ],
  "properties": {
    "guide_id": {
      "type": "string",
      "enum": [
        "cetirizine-zyrtec-babies-under-2",
        "infant-tylenol-under-2-years",
        "infant-motrin-6-to-23-months",
        "tylenol-motrin-24-to-35-lb",
        "medicine-dose-pounds-kilograms",
        "childrens-zyrtec-liquid-chewable-dissolve-tabs",
        "childrens-zyrtec-2-5-mg-chewable-label",
        "childrens-claritin-liquid-label",
        "childrens-cetirizine-mg-per-kg",
        "infant-motrin-under-6-months",
        "medicine-bottle-online-chart-disagree",
        "childrens-zyrtec-dose-age-or-weight",
        "infant-vs-childrens-motrin-concentration",
        "infant-vs-childrens-tylenol",
        "childrens-motrin-30-lb",
        "childrens-zyrtec-2-year-old",
        "childrens-zyrtec-10-month-old",
        "childrens-tylenol-weight-or-age",
        "tylenol-160-mg-per-5-ml-meaning",
        "child-age-weight-different-dose-chart-rows",
        "measure-childrens-liquid-medicine",
        "what-childrens-zyrtec-claritin-help-with",
        "zyrtec-claritin-child-cough-stuffy-nose",
        "childrens-zyrtec-claritin-morning-or-night",
        "childrens-allergy-medicine-with-food",
        "childrens-allergy-medicine-every-day",
        "child-fever-acting-normal-medicine",
        "tylenol-motrin-cough-cold-symptoms",
        "child-sore-throat-tylenol-motrin",
        "wake-sleeping-child-fever-medicine",
        "childrens-medicine-with-food",
        "tylenol-motrin-how-often-how-many-days"
      ]
    }
  }
}

Medicine question guides

For educational questions, comparisons, Zyrtec chewables or Claritin, call list_question_guides, then get_question_guide with the relevant public guide_id. Never forward the user’s question. Every published question guide is included automatically. Preserve the complete Markdown, including source links, formulation distinctions, tables and safety limitations. Guide coverage does not expand calculator support.

list_question_guides({})
get_question_guide({"guide_id":"medicine-bottle-online-chart-disagree"})

Ordinary questions

Your assistant handles the conversation; KinToolkit returns fixed public references. Ask “Which children’s Motrin bottle does KinToolkit support?” or “Which CVS cetirizine reference do you have?” The assistant should map those public product words to find_label_references filters, then preserve its clarification guidance. A general “Motrin” request returns both infant and children’s bottles rather than silently choosing one.

Matching an ingredient or strength does not establish interchangeability. The nine store-brand references remain source-linked library entries without calculator label directions. Unsupported or contradictory filter combinations return no_match and must not be replaced with another medicine.

Read the complete result

Successful calls retain structuredContent and a JSON copy in content[0].text for existing clients. A second text block, content[1].text, explains the result in plain English with the relevant restrictions and sources. 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

Connection troubleshooting: HTTP 406 on legacy-protocol POST requests means the client must send Accept: application/json, text/event-stream. HTTP 400 can indicate malformed JSON-RPC or inconsistent protocol metadata. Modern error -32020 means required headers are missing or disagree with the body; -32022 means an unsupported protocol version; -32021 means a missing client capability. Send the SDK-generated Mcp-Method, Mcp-Name (for tool calls), MCP-Protocol-Version and matching per-request _meta together. A legacy server/discover without the modern envelope returns method-not-found; use SDK negotiation instead of treating this probe failure as a tool outage. Do not force a newer MCP-Protocol-Version header onto an older request body; let the MCP SDK negotiate and build the required envelope. A successful tools/list only discovers capabilities. For a named bottle, call find_label_references; for the full catalog, call list_calculator_bottles. Both return the exact public identifiers for get_label_directions. If an exact published row is already known, call get_label_directions directly; repeated discovery is unnecessary. Never pass reference_only IDs to it.

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. All MCP HTTP methods and protocol messages count, including initialization, notifications and tool calls. Shared networks, NAT gateways and MCP providers share the same IP cap. Counters are regional, not a single worldwide quota.

Excess requests return HTTP 429 at the hosting firewall before reaching the application. A 429 response may be HTML rather than JSON. Honor a valid Retry-After value when present; otherwise wait at least 60 seconds. Use exponential backoff with jitter and a bounded number of retries. Do not retry immediately or switch IP addresses to evade the cap.

Application MCP responses include RateLimit-Policy: "mcp-ip-region";q=120;w=60;qu="requests". This informational policy header follows the current IETF HTTPAPI draft, not a finalized RFC; it does not report remaining requests or a reset time. The application cannot read the firewall's counters, so it does not emit a RateLimit remaining/reset value. The policy header is not guaranteed on firewall-blocked responses.

API change policy

KinToolkit will provide at least 90 days of advance public notice before making breaking changes to or removing supported API or tool functionality.

Public notices will appear in this section with the affected functionality, planned change or removal date, and migration guidance.

No supported API or tool functionality is currently deprecated.

A deprecation link identifies this policy; it does not announce a deprecation. No Deprecation or Sunset date is announced for the current API or tools.

Privacy

Do not send names, exact patient ages or weights, symptoms, medical histories, free text or other personal details. The tools accept only listed public label identifiers and bounded public product filters; 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, an allowlisted technical error category, a coarse self-reported software client family, metadata availability and source, allowlisted protocol revision, HTTP method, header-consistency and input-validation categories, 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, raw user-agent strings, raw client names and versions, 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. Client families use a finite allowlist for named software such as Claude, OpenAI, Codex, Cursor, Cline, Roo Code, VS Code, Windsurf, Continue, Glama, MCP Inspector, FastMCP and KinToolkit CLI, plus the documentation example and generic MCP-client claims. An unrecognized software name remains other; absent or invalid metadata remains unknown. Generic MCP-client claims do not identify an application or user. For integration tests, use /api/mcp?codex_qa=1 so requests are excluded from adoption counts; only the test boolean is recorded. Metadata status distinguishes not provided, invalid, recognized and unrecognized software names. Header and input checks describe technical shape only, never the supplied values. Client families are inferred only from exact allowlisted protocol client names; raw names and versions are discarded. These claims are not verified identities, and openai does not distinguish ChatGPT from API clients. Older clients usually identify themselves only at initialization; later requests remain unknown unless they include protocol client metadata. We do not join requests into sessions or infer a person from a client family.

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.