Koskamo

Whatic MCP

An official Model Context Protocol server provided by Whatic that enables AI agents to perform read-only IC datasheet searches, parametric part finding, and specification lookups grounded in real manufacturer PDFs.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Whatic MCP logo, by WhaticVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Whatic
MCP endpoint (Streamable HTTP)
https://whatic.io/mcp
Vendor documentation

What its tools do

7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

7 of 7 have a description · 7 of 7 declare behavior hints · 7 of 7 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to whatic.io ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search for electronic components by parametric criteria
  • Look up specific IC specifications from datasheets
  • Find ranked alternative parts for a given component

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
whatic 1.30.0
MCP protocol negotiated in check
2025-11-25
Tools
7 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "experimental": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

whatic answers hardware-engineering questions about integrated circuits from a curated datasheet corpus (MCU, analog, power and comms parts), a canonical parametric spec index built from those datasheets, and a distributor pricing snapshot. Reach for these tools whenever a question turns on a real component: a spec value, a register or pin detail, a shortlist by parameter, or a relative cost and availability check. Answers come from indexed datasheet content with a citable source, so prefer them over recall for any number you are about to state. Routing: - Part known, need a spec or section: `lookup` — full content grouped per part in one call. - Part unknown, or triaging first: `search`, then `get_segments` on the `ref` tokens worth reading in full. - Numeric parameters: `get_specs` is the cheapest and most precise source where the index covers the part. - Selecting against requirements: `find_parts`, then `compare_parts` to break ties on cost and sourcing. - Figures and plots: `get_image` on a `ref`. Grounding: cite the part and page of the record a claim came from; its `ref` re-fetches the exact segment. `get_specs` values carry no source reference — when a number needs a citable source, confirm it with `lookup`. If a value is not in what you fetched, say so rather than inferring it. A part missing from `get_specs` means the index lacks coverage, not that the datasheet lacks the parameter — fall back to `lookup`. `compare_parts` returns relative tiers from a snapshot: never restate them as a live price, a currency amount, or a stock count.

Tools

7 advertised

find_parts — Shortlist ICs by spec
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Shortlist IC part numbers by parametric spec constraints, ranked by how many constraints each part satisfies, then by headroom past those thresholds, and spread across device families. Each constraint is {canonical, op: gte|lte|eq|range, value, unit?}. Returns per-constraint pass/fail/unknown, plus `matched` (parts meeting EVERY constraint), `ranked` (all parts scored, partial matches included) and `returned` (parts in this response). `truncated` means some qualifying parts are not on this page. When `matched` is 0 every result is a partial match. `canonical` MUST be one of the exact (case-sensitive) names enumerated in this tool's inputSchema, also readable as the whatic://parametric/canonicals resource.

find_parts input schema
{
  "type": "object",
  "$defs": {
    "Constraint": {
      "type": "object",
      "title": "Constraint",
      "required": [
        "canonical",
        "op",
        "value"
      ],
      "properties": {
        "op": {
          "enum": [
            "gte",
            "lte",
            "eq",
            "range"
          ],
          "type": "string",
          "title": "Op",
          "description": "Comparison: gte (>=), lte (<=), eq (==), or range (value within [low, high])."
        },
        "unit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit",
          "default": null,
          "description": "Informational unit only, e.g. 'V', 'A' — comparison uses the stored SI value."
        },
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          ],
          "title": "Value",
          "description": "A single number for gte/lte/eq; a two-element [low, high] array for range."
        },
        "canonical": {
          "enum": [
            "abs_max_current",
            "abs_max_voltage",
            "adc_resolution",
            "block_erase_time",
            "breakdown_voltage_ds",
            "channel_count",
            "clamping_voltage",
            "clock_frequency",
            "cmrr",
            "cmti",
            "coil_power",
            "coil_resistance",
            "coil_voltage",
            "collector_emitter_voltage",
            "contact_current",
            "contact_resistance",
            "core_size",
            "cpu_speed",
            "current_rating",
            "dark_current",
            "data_rate",
            "data_retention",
            "dc_resistance",
            "drain_current",
            "driver_count",
            "dropout_voltage",
            "dynamic_range",
            "eeprom_size",
            "emitter_base_voltage",
            "fall_time",
            "forward_current",
            "forward_voltage",
            "gain_bandwidth",
            "gate_charge",
            "impedance",
            "input_bias_current",
            "input_capacitance",
            "input_offset_current",
            "input_offset_current_drift",
            "input_offset_voltage",
            "input_offset_voltage_drift",
            "input_voltage_noise_density",
            "insertion_loss",
            "io_count",
            "isolation_voltage",
            "junction_capacitance",
            "load_capacitance",
            "memory_size",
            "operate_time",
            "operating_frequency",
            "operating_temperature",
            "output_capacitance",
            "output_count",
            "output_current",
            "output_noise_voltage",
            "output_power",
            "output_voltage",
            "output_voltage_high",
            "output_voltage_low",
            "page_program_time",
            "peak_pulse_current",
            "power_dissipation",
            "program_erase_cycles",
            "program_memory_size",
            "propagation_delay",
            "psrr",
            "quiescent_current",
            "ram_size",
            "rds_on",
            "receiver_count",
            "rectified_current",
            "release_time",
            "response_time",
            "reverse_leakage_current",
            "reverse_recovery_time",
            "reverse_transfer_capacitance",
            "reverse_voltage",
            "rise_time",
            "sample_rate",
            "sector_erase_time",
            "sensitivity",
            "settling_time",
            "slew_rate",
            "standby_current",
            "supply_voltage_range",
            "switching_frequency",
            "switching_voltage",
            "vgs_threshold",
            "zener_voltage"
          ],
          "type": "string",
          "title": "Canonical",
          "description": "Canonical parameter name, e.g. supply_voltage_range — must be one of the values enumerated for this field (also readable as the whatic://parametric/canonicals resource)."
        }
      },
      "description": "One parametric spec constraint for find_parts."
    }
  },
  "title": "find_partsArguments",
  "required": [
    "constraints"
  ],
  "properties": {
    "top_k": {
      "type": "integer",
      "title": "Top K",
      "default": 50,
      "description": "Maximum number of parts to return, best first."
    },
    "constraints": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Constraint"
      },
      "title": "Constraints",
      "description": "Spec constraints; a part is ranked by how many it satisfies."
    }
  }
}
find_parts output schema
{
  "type": "object",
  "title": "find_partsDictOutput",
  "additionalProperties": true
}
find_parts annotations
{
  "title": "Shortlist ICs by spec",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_specs — Read IC specs
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Read canonical extracted specs (min/typ/max, unit, conditions) for known IC part numbers from a pre-extracted parametric index — not from datasheet text. This is the cheapest and most precise source for numeric parameters where it has coverage. Optionally restrict to specific canonical parameter names. A part absent from `results` (with a "No specs found" warning) means no index coverage, not that the datasheet lacks the parameter — fall back to `lookup` for that part.

get_specs input schema
{
  "type": "object",
  "title": "get_specsArguments",
  "required": [
    "part_numbers"
  ],
  "properties": {
    "canonicals": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Canonicals",
      "default": null,
      "description": "Optional: restrict to these canonical parameter names; omit to return all available specs."
    },
    "part_numbers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Part Numbers",
      "description": "Exact IC part numbers / MPNs, e.g. ['NE5532', 'LM358']. Family fallback is applied (e.g. TL084CDT -> TL084C)."
    }
  }
}
get_specs output schema
{
  "type": "object",
  "title": "get_specsDictOutput",
  "additionalProperties": true
}
get_specs annotations
{
  "title": "Read IC specs",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_parts — Compare IC cost and availability
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Relative price tier, stock posture, and library class for a set of IC part numbers (a ranking from a distributor snapshot, not a live quote).

compare_parts input schema
{
  "type": "object",
  "title": "compare_partsArguments",
  "required": [
    "parts"
  ],
  "properties": {
    "parts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Parts",
      "description": "Two or more IC part numbers to rank relatively; needs >=2 priced parts for a verdict."
    }
  }
}
compare_parts output schema
{
  "type": "object",
  "title": "compare_partsDictOutput",
  "additionalProperties": true
}
compare_parts annotations
{
  "title": "Compare IC cost and availability",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search — Search datasheets
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search the datasheet corpus; returns hit records (metadata + snippet, each with an opaque `ref`). Pass a ref list to `get_segments` for full content. If you already know the part number(s), prefer `lookup` — it fuses this search with `get_segments` in one call and groups full content per part. Use `search` when the part is unknown, or to triage snippets before pulling full content. For part-specific queries, pass scope='device:<MPN>' (e.g. scope='device:NE5532') to restrict hits to that part and avoid cross-part contamination.

search input schema
{
  "type": "object",
  "title": "searchArguments",
  "required": [
    "q"
  ],
  "properties": {
    "k": {
      "type": "integer",
      "title": "K",
      "default": 5,
      "description": "Maximum number of hit records to return."
    },
    "q": {
      "type": "string",
      "title": "Q",
      "description": "Free-text query, e.g. 'input voltage noise density'."
    },
    "scope": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Scope",
      "default": null,
      "description": "Optional filter, e.g. 'device:NE5532', to restrict hits to one part and avoid cross-part matches."
    }
  }
}
search output schema
{
  "type": "object",
  "title": "searchDictOutput",
  "additionalProperties": true
}
search annotations
{
  "title": "Search datasheets",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
lookup — Look up datasheet sections
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One-shot spec/section retrieval: full content of the most relevant datasheet segments for one or more parts (fuses search+get_segments). Already groups results per part (via `parts`), so prefer `lookup` over `search` when you know the part(s).

lookup input schema
{
  "type": "object",
  "title": "lookupArguments",
  "required": [
    "query"
  ],
  "properties": {
    "parts": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Parts",
      "default": null,
      "description": "Part numbers to scope and group the retrieval by; results are returned per part."
    },
    "query": {
      "type": "string",
      "title": "Query",
      "description": "What to retrieve, e.g. 'supply voltage' or 'absolute maximum ratings'."
    }
  }
}
lookup output schema
{
  "type": "object",
  "title": "lookupDictOutput",
  "additionalProperties": true
}
lookup annotations
{
  "title": "Look up datasheet sections",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_segments — Expand datasheet refs
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Expand opaque `ref` tokens (from search/lookup) into full datasheet segment content.

get_segments input schema
{
  "type": "object",
  "title": "get_segmentsArguments",
  "required": [
    "refs"
  ],
  "properties": {
    "refs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Refs",
      "description": "Opaque `ref` tokens from search/lookup hit records, to expand into full segment content."
    }
  }
}
get_segments output schema
{
  "type": "object",
  "title": "get_segmentsDictOutput",
  "additionalProperties": true
}
get_segments annotations
{
  "title": "Expand datasheet refs",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_image — Fetch datasheet figures
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetch datasheet figure images (PNG/JPEG) for opaque `ref` tokens obtained from search/lookup/get_segments. Returns each image plus its caption/description/page metadata. Only `type='image'` segments have image data; a ref that is not one comes back as an error record whose `available_images` lists the document's figures nearest that ref's page and section, closest first.

get_image input schema
{
  "type": "object",
  "title": "get_imageArguments",
  "required": [
    "refs"
  ],
  "properties": {
    "refs": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Refs",
      "description": "Opaque `ref` tokens (from search/lookup/get_segments) of image segments; non-image segments return an error record."
    }
  }
}
get_image annotations
{
  "title": "Fetch datasheet figures",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

1 advertised

parametric_canonicals

Advertised by the server during the last successful anonymous check.

parametric_canonicals URI
whatic://parametric/canonicals

MIME type: text/plain

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1062 ms
95th percentile latency
1062 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1062 ms · metadata changed · 7 tool(s), 1 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http whatic-mcp https://whatic.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add whatic-mcp --url https://whatic.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable whatic-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "whatic-mcp": {
      "url": "https://whatic.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "whatic-mcp": {
      "type": "streamableHttp",
      "url": "https://whatic.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start whatic-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "whatic-mcp": {
      "type": "http",
      "url": "https://whatic.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http whatic-mcp https://whatic.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://whatic.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "whatic-mcp": {
      "serverUrl": "https://whatic.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Whatic MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Whatic MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing