Toy Box MCP server
Use Toy Box tools from AI assistants and editors that support the Model Context Protocol (MCP). Add the server URL below to your client; no sign-up or API key is needed.
Use of the server is subject to the Terms of Service and the Privacy Policy.
Server
- URL:
https://mcp.toy-box.dev/mcp - Transport: Streamable HTTP (stateless)
- Authentication: None
- Language: English (tool names, descriptions and errors)
Connect
Claude
Works in Claude on the web, desktop and mobile apps.
- Open Customize > Connectors.
- Click Add custom connector.
- Enter the name
Toy Boxand the URLhttps://mcp.toy-box.dev/mcp. - If asked about authentication, choose No sign-in. Then click Add.
On the Free plan you can add one custom connector. To use it in a chat, click + > Connectors and turn Toy Box on. Menu names may change; see the official guide.
Claude Code
claude mcp add --transport http toy-box https://mcp.toy-box.dev/mcp
ChatGPT
ChatGPT connects to custom MCP servers in developer mode. Availability depends on your plan.
- Turn on developer mode (in recent versions: Settings > Apps > Advanced settings).
- Create an app with the MCP server URL
https://mcp.toy-box.dev/mcp. - Choose No authentication, save, and select the app in a new chat.
OpenAI moves these settings from time to time; see the official guide.
VS Code
Add this to .vscode/mcp.json:
{
"servers": {
"toy-box": { "type": "http", "url": "https://mcp.toy-box.dev/mcp" }
}
}
Cursor
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"toy-box": { "url": "https://mcp.toy-box.dev/mcp" }
}
}
Other clients
Any client that supports the Streamable HTTP transport can use the URL directly. For clients that only support local (stdio) servers, use a bridge such as mcp-remote:
npx -y mcp-remote https://mcp.toy-box.dev/mcp
Tools
This list is generated from the same definitions that serve the Web UI and REST API. Every tool runs on our server when called over MCP.
convert_color
Converts a CSS colour into HEX, RGB, HSL, HWB, OKLCH, OKLab, Lab, LCH and CMYK, and returns the nearest CSS colour name and the WCAG contrast ratio with white and black text. Colours outside sRGB are clipped into it.
Use Color Picker in your browser| Name | Type | Default | Description |
|---|---|---|---|
color · required | string | — | A CSS colour: #hex (3, 4, 6 or 8 digits), a named colour such as teal, or rgb(), hsl(), hwb(), lab(), lch(), oklab(), oklch() in comma or space syntax. (1–100 chars) |
Example calls
hex
{
"name": "convert_color",
"arguments": {
"color": "#00838F"
}
}space syntax with alpha
{
"name": "convert_color",
"arguments": {
"color": "rgb(255 0 0 / 50%)"
}
}oklch outside sRGB
{
"name": "convert_color",
"arguments": {
"color": "oklch(70% 0.4 150)"
}
}get_color_harmonies
Returns colours that go with a CSS colour: complementary, split complementary, analogous, triadic and tetradic colours (hue turned on the HSL colour wheel, saturation and lightness kept) and a scale of lighter and darker shades.
Use Color Picker in your browser| Name | Type | Default | Description |
|---|---|---|---|
color · required | string | — | A CSS colour: #hex (3, 4, 6 or 8 digits), a named colour such as teal, or rgb(), hsl(), hwb(), lab(), lch(), oklab(), oklch() in comma or space syntax. (1–100 chars) |
Example calls
teal
{
"name": "get_color_harmonies",
"arguments": {
"color": "#1B6F8C"
}
}calculate_date_difference
Counts the days between two dates and breaks them down into weeks, years/months/days, days per weekday, weekends, public holidays (200+ countries) and business days after excluding weekly days off, holidays and given closed days.
Use Date Calculator in your browser| Name | Type | Default | Description |
|---|---|---|---|
start · required | string | — | Start date (YYYY-MM-DD). |
end · required | string | — | End date (YYYY-MM-DD). It may be before the start; the dates are swapped. |
count | "exclusive" | "end" | "inclusive" | "end" | Which dates are counted. `end`: the days after the start up to and including the end (2026-01-01 to 2026-01-05 is 4 days). `inclusive`: both dates too (5 days). `exclusive`: only the days strictly between them (3 days). Every breakdown covers the counted days. |
weekend | integer[] | [6,7] | Weekly days off as ISO weekdays (1 = Monday ... 7 = Sunday). Defaults to Saturday and Sunday. (≤ 7 items) |
holidays | object | — | Public holidays to count as days off. Holidays are computed from the date-holidays rules and may differ from official announcements, especially for lunar and Islamic dates. At most 100 calendar years; Islamic-calendar holidays only for 1970–2076 and Hebrew-calendar ones for 1969–2099. |
closed | string[] | [] | Other days off, e.g. company holidays, one ISO date each. Duplicates are ignored. (≤ 3660 items) |
language | string | "en" | ISO 639-1 language for holiday names. Falls back to the country's own language. |
Example calls
days between two dates
{
"name": "calculate_date_difference",
"arguments": {
"start": "2026-01-01",
"end": "2026-01-05"
}
}business days in Japan with a company holiday
{
"name": "calculate_date_difference",
"arguments": {
"start": "2026-04-27",
"end": "2026-05-08",
"count": "inclusive",
"holidays": {
"country": "JP"
},
"closed": [
"2026-04-30",
"2026-05-01"
]
}
}lookup_dns_records
Looks up a domain's DNS records (A, AAAA, MX, TXT and more) with DNSSEC validation through Cloudflare's public resolver 1.1.1.1. An IP address is looked up as PTR (reverse DNS).
Use DNS Checker in your browser| Name | Type | Default | Description |
|---|---|---|---|
domain · required | string | — | Domain name (example.com), URL (the host is used) or IP address. Internationalized names are converted to punycode. (≤ 2048 chars) |
types | "A" | "AAAA" | "CNAME" | "MX" | "TXT" | "NS" | "SOA" | "CAA" | "SRV" | "PTR" | "HTTPS" | "SVCB" | "DS" | "DNSKEY" | "TLSA"[] | ["A","AAAA","CNAME","MX","TXT","NS","SOA","CAA"] | Record types to look up. Ignored for an IP address, which is looked up as PTR. (1–15 items) |
Example calls
default record types
{
"name": "lookup_dns_records",
"arguments": {
"domain": "example.com"
}
}chosen record types
{
"name": "lookup_dns_records",
"arguments": {
"domain": "example.com",
"types": [
"MX",
"TXT"
]
}
}reverse lookup of an IP address
{
"name": "lookup_dns_records",
"arguments": {
"domain": "1.1.1.1"
}
}check_ogp
Fetches a web page and checks its Open Graph and X (Twitter) card tags: required and recommended tags, the preview image (reachable, format, size) and common mistakes.
Use OGP Checker in your browser| Name | Type | Default | Description |
|---|---|---|---|
url · required | string | — | Public http(s) URL of the page to check. (≤ 2048 chars) |
Example calls
check a page
{
"name": "check_ogp",
"arguments": {
"url": "https://example.com/"
}
}test_regex
Tests a JavaScript (ECMAScript) regular expression against one or more texts and returns every match with its position and capture groups. With the g flag (the default) all matches are returned, without it only the first, as String.prototype.matchAll and RegExp.prototype.exec do. Each text can state whether it should match, to check a pattern against positive and negative examples. A pattern that runs too long (catastrophic backtracking, e.g. (a+)+ on a long non-matching text) is stopped and the request fails, so avoid nested repetition.
Use Regex Tester in your browser| Name | Type | Default | Description |
|---|---|---|---|
pattern · required | string | — | The pattern without slashes, e.g. `(\d{4})-(\d{2})`. Backslashes are literal. (≤ 10000 chars) |
flags | string | "g" | JavaScript flags: g (all matches), i (ignore case), m (^ and $ match at line breaks), s (. matches line breaks), u or v (Unicode), y (sticky), d (indices; always on internally). |
texts · required | object[] | — | Texts to test, each checked separately. (1–20 items) |
Example calls
dates with named groups
{
"name": "test_regex",
"arguments": {
"pattern": "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})",
"texts": [
{
"text": "Released 2026-10-28, patched 2026-11-02.",
"expect": "match"
},
{
"text": "No date here",
"expect": "no-match"
}
]
}
}first match only without g, case-insensitive and multiline
{
"name": "test_regex",
"arguments": {
"pattern": "^error: (.+)$",
"flags": "im",
"texts": [
{
"text": "ok\nERROR: disk full\nerror: retry"
}
]
}
}parse_url
Parses a URL as browsers do (WHATWG URL Standard) and returns its scheme (flagging unknown schemes and likely typos), user info, host (with registrable domain and subdomain), port, path, decoded query parameters (flagging known tracking parameters) and fragment. For mailto: URLs it also returns recipients, subject and body per RFC 6068.
Use URL Parser in your browser| Name | Type | Default | Description |
|---|---|---|---|
url · required | string | — | Absolute URL, parsed as browsers do (WHATWG URL Standard). (≤ 65536 chars) |
Example calls
shop URL with tracking parameters
{
"name": "parse_url",
"arguments": {
"url": "https://Shop.Example.co.jp:443/products/winter-coat?color=navy&q=%E5%86%AC+%E3%82%B3%E3%83%BC%E3%83%88&utm_source=newsletter&fbclid=IwAR0xYz9#reviews"
}
}internationalized domain with credentials
{
"name": "parse_url",
"arguments": {
"url": "http://admin:hunter2@例え.テスト:8080/資料/../最新版.pdf"
}
}mailto URL with recipients and header fields
{
"name": "parse_url",
"arguments": {
"url": "mailto:info@example.com?cc=sales@example.com&subject=Hello%20world&body=1+1%3D2"
}
}edit_url
Removes, replaces or adds query parameters of a URL and optionally drops its fragment, e.g. to strip tracking parameters. Steps run in order: keepParams, removeParams, removeTracking, setParams, appendParams, removeFragment. Untouched parameters keep their original spelling. For mailto: URLs the parameters are header fields (cc, subject, body, ...) and are percent-encoded per RFC 6068.
Use URL Parser in your browser| Name | Type | Default | Description |
|---|---|---|---|
url · required | string | — | Absolute URL, parsed as browsers do (WHATWG URL Standard). (≤ 65536 chars) |
keepParams | string[] | — | If given, remove every parameter whose name is not listed. (≤ 1000 items) |
removeParams | string[] | [] | Remove parameters with these names. (≤ 1000 items) |
removeTracking | boolean | false | Remove known tracking parameters (utm_*, gclid, fbclid, msclkid, ...). |
setParams | object[] | [] | Set each name to a value: replaces the first parameter with that name and removes the others, or appends it. (≤ 1000 items) |
appendParams | object[] | [] | Append these parameters at the end. (≤ 1000 items) |
removeFragment | boolean | false | Remove the #fragment. |
Example calls
strip tracking parameters
{
"name": "edit_url",
"arguments": {
"url": "https://example.com/item?id=42&utm_source=newsletter&utm_medium=email&fbclid=IwAR0xYz9#specs",
"removeTracking": true
}
}keep one parameter, set another and drop the fragment
{
"name": "edit_url",
"arguments": {
"url": "https://example.com/search?q=a~b&page=2&sort=new#top",
"keepParams": [
"q",
"page"
],
"setParams": [
{
"name": "page",
"value": "3"
}
],
"appendParams": [
{
"name": "lang",
"value": "ja jp"
}
],
"removeFragment": true
}
}generate_uuid
Generates one or more random UUIDs (version 4 or time-ordered version 7).
Use UUID Generator in your browser| Name | Type | Default | Description |
|---|---|---|---|
version | "v4" | "v7" | "v4" | UUID version. |
count | integer | 1 | How many UUIDs to generate. (1–100) |
Example calls
single v4
{
"name": "generate_uuid",
"arguments": {}
}five v7
{
"name": "generate_uuid",
"arguments": {
"version": "v7",
"count": 5
}
}Privacy and usage
- Tool inputs and outputs are used only to run the tool. They are not included in usage statistics, which record items such as the tool, the result status and how long it took. For how logs and other data are handled, see the privacy policy.
- Results are returned as structured content, with the same JSON in a text block for clients that do not read structured content.
- Tools keep backward compatibility. A tool that will be removed says deprecated at the start of its description.
- There is no sign-in. Please avoid heavy automated traffic; sources that harm the service may be blocked.
Support
For questions, bug reports or requests, use the support page.