Connect as an MCP server
1234.nu speaks the Model Context Protocol over the Streamable HTTP transport. Point any MCP client at this URL — no auth, no session setup:
https://1234.nu/mcp
Claude Code:
claude mcp add --transport http 1234nu https://1234.nu/mcp
Or in an mcpServers config block (Claude Desktop, editors, etc.):
{
"mcpServers": {
"1234nu": {
"type": "http",
"url": "https://1234.nu/mcp"
}
}
}
The server exposes tools/list and tools/call for the tools below. It's stateless — every POST is a self-contained JSON-RPC 2.0 request.
Plain REST API
Prefer a plain HTTP call? Every tool is also reachable directly. The request body is the arguments object.
# list every tool and its input schema
curl https://1234.nu/api/tools
# run one tool
curl -X POST https://1234.nu/api/tools/hash \
-H 'Content-Type: application/json' \
-d '{"text":"hello","algo":"sha256"}'
# → {"ok":true,"result":"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"}
Success → { "ok": true, "result": "..." }. Bad input → HTTP 400 with { "ok": false, "error": "..." }.
OpenAPI spec
An OpenAPI 3.1 description of every tool — import it into Postman, an editor, or a code generator:
https://1234.nu/api/openapi.json
Available tools (138)
Expand Try it out on any tool to call it live, right from this page.
hash| text* | string | Text to hash |
| algo | md5 | sha1 | sha256 | sha512 | (default: sha256) |
Try it out
hmac| message* | string | |
| key* | string | |
| algo | sha256 | sha512 | sha1 | (default: sha256) |
| encoding | hex | base64 | (default: hex) |
Try it out
base64| text* | string | |
| mode | encode | decode | (default: encode) |
Try it out
url_encode| text* | string | |
| mode | encode | decode | (default: encode) |
Try it out
json_format| text* | string | |
| indent | integer | Spaces of indentation; 0 minifies (default: 2) |
Try it out
yaml_to_json| text* | string |
Try it out
json_to_yaml| text* | string |
Try it out
uuid| count | integer | (default: 1) |
| version | 4 | 7 | 4 = random, 7 = time-ordered (unix-ms prefix) (default: 4) |
Try it out
morse| text* | string | |
| action | encode | decode | (default: encode) |
Try it out
roman| input* | string | Number or Roman numeral, as text |
| direction | toRoman | fromRoman | (default: toRoman) |
Try it out
slugify| text* | string |
Try it out
case_convert| text* | string | |
| target* | camel | pascal | snake | kebab | constant | title |
Try it out
text_stats| text* | string |
Try it out
base32| text* | string | |
| mode | encode | decode | (default: encode) |
Try it out
hex| text* | string | |
| mode | encode | decode | (default: encode) |
Try it out
html_entities| text* | string | |
| mode | encode | decode | (default: encode) |
Try it out
rot13| text* | string | |
| shift | integer | Letters to shift (13 = ROT13) (default: 13) |
Try it out
crc32| text* | string |
Try it out
base_convert| value* | string | The number, as text |
| fromBase | integer | (default: 10) |
| toBase | integer | (default: 16) |
Try it out
gzip| text* | string | |
| mode | compress | decompress | (default: compress) |
| algorithm | gzip | deflate | brotli | zstd | (default: gzip) |
Try it out
jwt_decode| token* | string |
Try it out
password| length | integer | (default: 20) |
| symbols | boolean | Include punctuation symbols (default: true) |
| digits | boolean | Include digits (default: true) |
Try it out
color_convert| color* | string |
Try it out
lorem| unit | words | sentences | paragraphs | (default: paragraphs) |
| count | integer | (default: 3) |
Try it out
list_ops| a* | string | List A, one item per line |
| b* | string | List B, one item per line |
| op | union | intersect | a_only | b_only | (default: intersect) |
| ignore_case | boolean | (default: false) |
Try it out
validate| value* | string | The value to validate |
| kind* | iban | card | bic | isbn | vat |
Try it out
json_to_table| json* | string | A JSON array of objects |
Try it out
math_eval| expr* | string |
Try it out
numeronym| text* | string |
Try it out
email_normalize| emails* | string | |
| dedupe | boolean | (default: true) |
Try it out
json_to_xml| json* | string |
Try it out
escape| text* | string | The string to transform |
| mode | json | regex | html | sql | shell | uri | (default: json) |
| action | escape | unescape | (default: escape) |
Try it out
sort_lines| text* | string | The text, one item per line |
| mode | asc | desc | len_asc | len_desc | reverse | dedupe | shuffle | freq | (default: asc) |
| trim_lines | boolean | (default: false) |
| remove_blanks | boolean | (default: false) |
| ignore_case | boolean | (default: false) |
Try it out
flip_text| text* | string | |
| mode | updown | mirror | both | (default: updown) |
Try it out
leet| text* | string | |
| level | basic | full | (default: basic) |
Try it out
forge| input | string | The input data as UTF-8 text. For binary, base64-encode it and begin the recipe with a from-base64 step. |
| recipe | array | Ordered operations. Each item is { "op": "<id>", "args": { ... } } — e.g. [{"op":"to-base64"},{"op":"upper"}]. See list_operations for ids/args. |
| output | auto | utf8 | base64 | hex | How to render a binary result: auto = text when printable UTF-8 else base64. (default: auto) |
| list_operations | boolean | If true, ignore input/recipe and return the operation catalogue as JSON. (default: false) |
Try it out
ohms_law| voltage | number | Volts |
| current | number | Amps |
| resistance | number | Ohms |
| power | number | Watts |
Try it out
resistor_color_code| bands* | array | Band colors in order, e.g. ["yellow","violet","red","gold"] |
Try it out
led_resistor| supply* | number | Supply voltage (V) |
| led_forward* | number | LED forward voltage (V) |
| current_ma* | number | Forward current (mA) |
| count | number | LEDs in series (default: 1) |
Try it out
voltage_divider| vin* | number | Input voltage (V) |
| r1* | number | Top resistor (ohms) |
| r2* | number | Bottom resistor (ohms) |
Try it out
filter_cutoff| type | rc | rl | lc | (default: rc) |
| r | number | Resistance (ohms) |
| c | number | Capacitance (farads) |
| l | number | Inductance (henries) |
Try it out
timer_555| mode | astable | monostable | (default: astable) |
| r1 | number | |
| r2 | number | |
| r | number | |
| c | number |
Try it out
reactance| frequency* | number | Frequency in Hz |
| capacitance | number | Capacitance in farads |
| inductance | number | Inductance in henries |
Try it out
wire_gauge| awg* | number | Gauge number, -3 (0000) to 40 |
Try it out
decibels| mode | power | voltage | (default: power) |
| ratio | number | Linear ratio (out/in), > 0 |
| db | number | Decibels |
Try it out
opamp_gain| config | noninverting | inverting | (default: noninverting) |
| rf* | number | Feedback resistor (ohms) |
| rin* | number | Input / ground-leg resistor (ohms) |
| vin | number | Optional input voltage (V) |
Try it out
lm317| r1* | number | R1, adj→out (ohms) |
| r2 | number | R2, adj→gnd (ohms) |
| target_vout | number | Desired output voltage (V) — returns R2 |
Try it out
voltage_drop| current_a* | number | Load current (A) |
| length_m* | number | One-way conductor length (m) |
| area_mm2* | number | Conductor cross-section (mm²) |
| supply_v* | number | Supply voltage (V) |
| material | copper | aluminium | (default: copper) |
| system | dc | 1phase | 3phase | (default: dc) |
Try it out
pcb_trace_width| current_a* | number | Trace current (A) |
| temp_rise_c | number | Allowed temperature rise (°C) (default: 10) |
| copper_oz | number | Copper weight (oz) (default: 1) |
| layer | external | internal | (default: external) |
| length_mm | number | Trace length (mm), optional |
Try it out
battery_pack| cell_voltage* | number | Cell nominal voltage (V) |
| cell_capacity_mah* | number | Cell capacity (mAh) |
| series* | integer | Cells in series (S) |
| parallel* | integer | Cells in parallel (P) |
| cell_full_v | number | Cell full-charge voltage (V), optional |
Try it out
zener_resistor| vin* | number | Input voltage (V) |
| vz* | number | Zener voltage (V) |
| load_ma* | number | Load current (mA) |
| izmin_ma | number | Minimum zener current (mA) (default: 5) |
Try it out
bjt_bias| vcc* | number | Supply voltage (V) |
| beta* | number | Current gain hFE |
| r1_ohm* | number | R1, Vcc→base (Ω) |
| r2_ohm* | number | R2, base→gnd (Ω) |
| rc_ohm* | number | Collector resistor (Ω) |
| re_ohm* | number | Emitter resistor (Ω) |
| vbe | number | Base-emitter voltage (V) (default: 0.7) |
Try it out
psu_ripple| load_ma* | number | Load current (mA) |
| ripple_vpp* | number | Target peak-to-peak ripple (V) |
| rectifier | full | half | (default: full) |
| line_hz | number | Mains frequency (Hz) (default: 50) |
Try it out
fuse_select| load_a* | number | Steady load current (A) |
| inrush_a | number | Inrush/surge current (A), optional |
| ambient_c | number | Ambient temperature (°C) (default: 25) |
Try it out
pwm_average| supply_v* | number | Supply voltage (V) |
| duty_pct | number | Duty cycle (0–100) |
| freq_hz | number | Switching frequency (Hz), optional |
| target_avg_v | number | Desired average voltage — returns the duty needed |
Try it out
ntc_thermistor| model | beta | steinhart | (default: beta) |
| direction | r_to_t | t_to_r | (default: r_to_t) |
| r0_ohm | number | Resistance at 25 °C (Beta model) (default: 10000) |
| beta | number | Beta coefficient (K) (default: 3950) |
| a | number | Steinhart-Hart A |
| b | number | Steinhart-Hart B |
| c | number | Steinhart-Hart C |
| resistance_ohm | number | Measured resistance (for r_to_t) |
| temp_c | number | Temperature °C (for t_to_r) |
Try it out
wavelength| frequency_hz | number | Frequency in Hz |
| wavelength_m | number | Wavelength in metres |
| velocity_factor | number | Velocity factor (1 = free space) (default: 1) |
Try it out
antenna_length| frequency_hz* | number | Frequency in Hz |
| velocity_factor | number | Velocity factor (≈0.95 for wire) (default: 0.95) |
Try it out
fspl| distance_km* | number | Distance in km |
| frequency_mhz* | number | Frequency in MHz |
Try it out
link_budget| tx_power_dbm* | number | |
| tx_gain_dbi | number | (default: 0) |
| rx_gain_dbi | number | (default: 0) |
| path_loss_db* | number | |
| other_loss_db | number | (default: 0) |
| rx_sensitivity_dbm* | number |
Try it out
lora_airtime| payload_bytes* | integer | PHY payload length (bytes) |
| sf* | integer | Spreading factor 7-12 |
| bandwidth_hz | integer | Bandwidth in Hz (125000/250000/500000) (default: 125000) |
| coding_rate | integer | Coding-rate denominator 5-8 (4/5..4/8) (default: 5) |
| preamble | integer | (default: 8) |
| explicit_header | boolean | (default: true) |
| crc | boolean | (default: true) |
Try it out
modbus_address| address* | integer | Modbus data address, e.g. 40001 |
Try it out
meshtastic_airtime| preset | string | Modem preset: LongFast, ShortFast, MediumSlow, etc. (default: LongFast) |
| payload_bytes | integer | Data payload size in bytes (default: 30) |
Try it out
meshtastic_channel_url| name | string | (default: ) |
| preset | string | (default: LongFast) |
| region | string | (default: UNSET) |
| psk | string | "default", "none", or a 16/32-byte key as hex (default: default) |
Try it out
meshtastic_channel_decode| url* | string |
Try it out
solar_yield| kwp* | number | Array size (kWp) |
| specific_yield | number | Regional specific yield (kWh/kWp/year, optimal) (default: 1000) |
| orientation_factor | number | Orientation factor 0-1 (south = 1) (default: 1) |
| tilt_factor | number | Tilt factor 0-1 (optimal = 1) (default: 1) |
Try it out
battery_roi| capacity_kwh* | number | |
| price* | number | |
| efficiency_pct | number | (default: 90) |
| cycles_per_day | number | (default: 1) |
| buy_price* | number | Grid buy price per kWh |
| feed_in_price | number | Export/feed-in price per kWh (default: 0) |
| cycle_life | number | (default: 6000) |
Try it out
ev_charge_time| capacity_kwh* | number | |
| power_kw* | number | |
| current_soc | number | (default: 20) |
| target_soc | number | (default: 80) |
| efficiency_pct | number | (default: 90) |
Try it out
co2_device| watts* | number | |
| hours_per_day* | number | |
| quantity | integer | (default: 1) |
| intensity_g_per_kwh | number | (default: 400) |
Try it out
semver_compare| a* | string | |
| b* | string |
Try it out
semver_satisfies| version* | string | |
| range* | string |
Try it out
semver_bump| version* | string | |
| type | major | minor | patch | premajor | preminor | prepatch | prerelease | (default: patch) |
Try it out
dockerfile_lint| text* | string |
Try it out
openapi_validate| text* | string |
Try it out
dew_point| temp_c* | number | |
| humidity_pct* | number |
Try it out
feels_like| temp_c* | number | |
| wind_kmh | number | (default: 0) |
| humidity_pct | number | (default: 50) |
Try it out
moon_phase| date | string | ISO date/time, e.g. 2026-06-21 |
Try it out
sun_position| date | string | |
| lat* | number | |
| lon* | number |
Try it out
gps_distance| lat1* | number | |
| lon1* | number | |
| lat2* | number | |
| lon2* | number |
Try it out
coords_convert| lat* | number | |
| lon* | number |
Try it out
magnetic_declination| lat* | number | |
| lon* | number | |
| elevation_m | number | (default: 0) |
| date | string | ISO date, e.g. 2026-07-31 (now if omitted) |
Try it out
calories_burned| met* | number | |
| weight_kg* | number | |
| minutes* | number |
Try it out
hiking_time| distance_km* | number | |
| ascent_m | number | (default: 0) |
| pace_kmh | number | (default: 5) |
| climb_rate_mh | number | (default: 600) |
Try it out
typoglycemia| text* | string |
Try it out
noisy_text| text* | string | |
| amount | integer | (default: 5) |
Try it out
fake| type* | persona | company_profile | name | first_name | last_name | username | email | phone_nl | phone | birthdate | bsn | address | street | postcode | city | country | company | kvk | vat | job | iban | bic | card | uuid | ipv4 | ipv6 | mac | color | date | string | number | What to generate (default: name) |
| count | integer | How many rows (1–500) (default: 1) |
| format | list | json | csv | sql | postgres | Output format (default: json) |
Try it out
fake_schema| fields* | array | The schema: one entry per column. |
| count | integer | How many rows (1–500) (default: 25) |
| format | list | json | csv | sql | postgres | Output format (default: json) |
| table | string | Table / dataset name for SQL and Postgres output (default: fake_data) |
Try it out
number_format| value* | number | The number to format |
Try it out
unit_convert| value* | number | |
| category* | length | mass | data | speed | area | volume | temperature | |
| from* | string | Source unit (e.g. km, lb, MB, mph, m2, l, C) |
| to* | string | Target unit |
Try it out
percentage| mode* | percent_of | what_percent | change | tip | vat | |
| x | number | |
| y | number | |
| rate | number | Tip/VAT percentage (tip and vat modes) |
| split | integer | People to split a tip across (default: 1) |
| direction | add | remove | VAT: add tax to a net amount, or remove it from a gross amount (default: add) |
Try it out
prime| value* | string | A positive integer, as text |
Try it out
number_stats| numbers* | string | Numbers separated by spaces, commas or newlines |
Try it out
fraction| expression* | string |
Try it out
gcd_lcm| numbers* | string | Integers separated by spaces or commas |
Try it out
combinatorics| n* | integer | |
| r* | integer |
Try it out
solve_equation| coefficients* | array | 2, 3 or 4 coefficients, highest power first |
Try it out
matrix| op* | add | subtract | multiply | transpose | determinant | inverse | rank | trace | |
| a* | string | Matrix A (rows on separate lines) |
| b | string | Matrix B (add/subtract/multiply) |
Try it out
finance| mode* | savings | loan | |
| principal* | number | Starting amount / loan amount |
| annual_rate* | number | Annual interest rate, percent |
| years* | number | |
| monthly_deposit | number | savings: added each month (default: 0) |
| compounds_per_year | integer | (default: 12) |
| extra_monthly | number | loan: extra principal each month (default: 0) |
Try it out
bitwise| op* | and | or | xor | not | shl | shr | sar | |
| a* | string | First operand |
| b | string | Second operand (and/or/xor) or shift amount (shl/shr/sar) |
| width | 8 | 16 | 32 | 64 | (default: 32) |
Try it out
float_inspect| value* | string | A decimal number, or a hex bit-pattern when input=hex |
| precision | 32 | 64 | (default: 64) |
| input | decimal | hex | (default: decimal) |
Try it out
text_binary| text* | string | |
| mode | encode | decode | (default: encode) |
Try it out
unicode_inspect| text* | string |
Try it out
hexdump| text* | string |
Try it out
string_ops| text* | string | |
| op* | trim | trim_lines | upper | lower | pad_left | pad_right | truncate | wrap | repeat | number_lines | remove_blank | remove_dupes | reverse | reverse_lines | count | |
| n | integer | Numeric argument (pad width, truncate/wrap length, repeat count) |
| fill | string | Pad character (default: ) |
| needle | string | Substring to count (op=count) |
Try it out
whitespace_inspect| text* | string |
Try it out
markdown_table| text* | string | |
| align | left | center | right | (default: left) |
Try it out
query_string| input* | string | A full URL or a raw query string |
Try it out
env_parse| text* | string | |
| action | parse | generate | (default: parse) |
Try it out
csv_json| input* | string | |
| direction | csv2json | json2csv | (default: csv2json) |
| delimiter | string | (default: ,) |
Try it out
cidr| cidr* | string | IPv4 address or CIDR, e.g. 10.0.0.0/24 |
Try it out
subnet_vlsm| base* | string | Base network in CIDR, e.g. 10.0.0.0/16 |
| requirements* | array | Each "name:hosts" or just a host count |
Try it out
user_agent| ua* | string | The User-Agent string |
Try it out
password_hash| action | hash | verify | (default: hash) |
| password* | string | |
| stored | string | The stored hash (action=verify) |
Try it out
totp| secret* | string | Base32 secret |
| digits | 6 | 7 | 8 | (default: 6) |
| period | integer | (default: 30) |
| algorithm | SHA-1 | SHA-256 | SHA-512 | (default: SHA-1) |
| unixtime | integer | Unix seconds to compute for (default: now) |
Try it out
nato| text* | string |
Try it out
mock_text| text* | string |
Try it out
fancy_text| text* | string | |
| style* | bold | italic | bold_italic | script | fraktur | double_struck | monospace | fullwidth | circled | squared | small_caps | strikethrough | underline |
Try it out
dice| notation* | string | Dice expression, e.g. 4d6+2 |
Try it out
golden_hour| lat* | number | |
| lon* | number | |
| date* | string | YYYY-MM-DD |
Try it out
sun_times| lat* | number | |
| lon* | number | |
| date* | string | YYYY-MM-DD |
Try it out
htpasswd| user* | string | |
| password* | string |
Try it out
sql_format| text* | string | The SQL to format |
| language | sql | mysql | postgresql | mariadb | sqlite | plsql | tsql | bigquery | snowflake | (default: sql) |
| uppercase | boolean | Upper-case SQL keywords (default: true) |
| tab_width | integer | (default: 2) |
Try it out
commit_lint| message* | string | The full commit message (header + optional body) |
Try it out
bip39| action* | generate | validate | (default: generate) |
| strength | 128 | 160 | 192 | 224 | 256 | Entropy bits (generate): 128->12 words … 256->24 words (default: 128) |
| entropy_hex | string | Generate from this hex entropy instead of random (for reproducible output) |
| mnemonic | string | The space-separated phrase to validate (action=validate) |
Try it out
gitignore| stacks* | array | Template names to include, in order |
Try it out
clean_url| url* | string | The URL to clean |
Try it out
ip_range_to_cidr| start* | string | First IPv4 address, e.g. 10.0.0.0 |
| end* | string | Last IPv4 address, e.g. 10.0.0.255 |
Try it out
workdays_between| start* | string | Start date, YYYY-MM-DD |
| end* | string | End date, YYYY-MM-DD (inclusive) |
| holidays | array | Holiday dates to skip, YYYY-MM-DD |
| weekend | array | Weekend day numbers, 0=Sunday..6=Saturday (default [0,6]) |
Try it out
cbor_decode| data* | string | CBOR bytes as hex or base64 |
Try it out
prompt_injection_scan| text* | string | The text to scan |
Try it out
llmstxt_validate| text* | string | The llms.txt content to validate |
Try it out
agents_md_grade| text* | string | The AGENTS.md / CLAUDE.md content to grade |
Try it out
protobuf_decode| data* | string | Protobuf bytes as hex or base64 |
| format | auto | hex | base64 | How to interpret data (default auto-detect) (default: auto) |
Try it out
diff| before* | string | Original text |
| after* | string | Changed text |
| mode | lines | words | chars | patch | (default: lines) |
Try it out
jsondiff| a* | string | Document A (old), as JSON text |
| b* | string | Document B (new), as JSON text |
Try it out
jsonschema| mode | validate | infer | (default: validate) |
| data* | string | JSON document: the data to validate, or the sample to infer a schema from |
| schema | string | JSON Schema as JSON text (required when mode is "validate") |
| title | string | Root schema title, used when mode is "infer" (default: Root) |
Try it out
types| data* | string | JSON document to infer types from |
| rootName | string | Name for the root type (default: Root) |
Try it out
triangle| a | number | side a, opposite angle A |
| b | number | side b, opposite angle B |
| c | number | side c, opposite angle C |
| A | number | angle A in degrees |
| B | number | angle B in degrees |
| C | number | angle C in degrees |
Try it out
* = required. All tools are pure transforms — no data is stored.