{"name":"io.github.CordilleraSarl/clearotron","slug":"cordillerasarl-clearotron","title":null,"description":"Clearotron — trademark clearance that shows its work","url":"https://mcp.market/server/cordillerasarl-clearotron","rating":null,"grade":"B","score":75,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":33,"stars":2,"forks":0,"downloads_week":484,"last_push_at":"2026-10-28T04:04:28.000Z","license":"AGPL-3.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/CordilleraSarl/clearotron","website":null,"version":"0.4.1","remotes":[],"packages":[{"registryType":"npm","identifier":"clearotron","version":"0.4.1","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"}]}],"tools":[{"name":"ack_event","description":"OPS-ONLY. Consume ONE routed outbox event by its file name (from list_outbox_events). Idempotent (ok+alreadyGone). The delivered marker is instead cleared by mark_sent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"band_record","description":"The OFFICIAL registry record the driver fetched into this run's _records/ for a given record_id (/mark/... uri) — the fetched document itself, for detail the band row does not carry. Cite the uri in whatever form the band, the findings or the provider gave you: case, a wrapping provider URL and the registration-instance suffix are all resolved to the same document. Read-only: it never fetches; an ","write_action":false,"price_micros":0,"input_schema":null},{"name":"band_shape","description":"The deterministic shape of this run's merged register band: totals, mechanical tiers, the floors (every live in-class identical/near-identical record), each marked on its line in the band in the lawyer's order, class/status/registry/recency census, owner concentrations, crowd descriptors (with crowd-context joins) and blind spots. Read this FIRST, then pull what it names via band_lookup/band_recor","write_action":false,"price_micros":0,"input_schema":null},{"name":"brief","description":"START HERE for any 'what do you have on X / what did the search find' question — ONE plain-language briefing of a run, in the client-voiced wording (which search product this run was, overall risk in plain words, each conflict in 1–2 plain sentences, any conditions on the result). Facts, never advice. No internal stage names, no risk-formula codes, no model names. Reach for the audit tools (get_ru","write_action":false,"price_micros":0,"input_schema":null},{"name":"decision_timeline","description":"ENGINEERING/AUDIT view — the run's DECISION timeline: an ordered milestone list projected from the event log — stages (with trigger and a 'changedFromPrevious' marker when a stage was recomputed), skeptic escalations (with the reason), the verdict(s) (with the reviewer's head note), screen-gates, and the terminal outcome. Answers 'how did the verdict evolve?' in one call; for 'what did it find', c","write_action":false,"price_micros":0,"input_schema":null},{"name":"describe_options","description":"START HERE before composing a search — the option space, for free. Returns the four searches this deployment can actually run — each with the geography it accepts, how many names it reads, its turnaround, whether it carries the case-law reading, whether the native-language investigation is optional or automatic, and a plain note when one is unavailable — plus the combination rules the servers enfo","write_action":false,"price_micros":0,"input_schema":null},{"name":"diff_artifact","description":"Diff two versions of an artifact (what actually changed between them). Versions exist only when something snapshotted them — an in-place re-dispatch (_history) or a what-if experiment (_experiments); the automated escalation/correction overwrites in place, so a normal run has only 'canonical' and there's nothing to diff (reported honestly). Defaults: a=canonical, b=newest snapshot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"feed_context","description":"OPS-ONLY. Late-bind context onto a run: the applicant + exclusions (written as customer-bind.json, the pipeline's pre-start applicant bind). Use to resolve a customer-unknown run.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fetch_url","description":"Fetch a public URL over HTTP(S) GET and return the response body as text (read-only). Use for public sources such as EUR-Lex.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_coverage","description":"What was searched vs what's a gap: per-register-axis presence/validity, the coverage-ledger marker, negative-results count, and per-artifact validity.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_delivery_packet","description":"The run's send payload: _driver/delivery.json (subject, recipient routing, verbatim emailBodyHtml, whatsapp line) and/or failure.json, plus sendPending/.sent state. NOT exposed to client tokens.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_finding","description":"One finding/negative/audit-trail record by id (F#, NR#, AT#).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_provider_usage","description":"ENGINEERING/AUDIT view — billed register-search provider call counts for the run, RECOMPUTED live from the ledger (more correct than the cached value) with a drift/low-confidence flag.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_run","description":"ENGINEERING/AUDIT view — full run mechanics: status, every pipeline stage (trigger/outcome), failover facts, artifact validity, and a coverage summary. Use when the user asks how the run executed; for 'what did it find', call brief instead.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_search_coverage","description":"What the search covered and what is still open, in the report's own words — each area with its state (Searched — clean / Partially covered / Open item / Not run this run). An area that is not clean is NOT cleared: read it as open. Reach for this whenever a result looks clean and the user is about to rely on it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_telemetry","description":"ENGINEERING/AUDIT view — per-run + per-stage execution telemetry (models, tokens, wall, failovers, fail reasons) from run.jsonl + the per-attempt logs. The ONLY tool that reports model identity — keep model names out of answers unless explicitly asked. Pass stage (+axis) to focus.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_evidence","description":"The records this search considered — every register and common-law entry, including ones the report does not name individually. Each carries the mark, owner and country, the classes, the register status, the source link, whether the provider record was actually retrieved (`retrieved`), and `superseded: true` if a later pass withdrew it. Use this to answer 'what exactly did you find, and who owns i","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_findings","description":"Structured findings from the deterministic audit. kind: findings (default) | negatives | audit (audit-trail). Filter by sourceLayer (Register/Common-law). Pass group (on-field/off-field/out-of-scope) to get the curated report cards instead — the cards' one-liners are already plain-language.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_outbox_events","description":"Integrator discovery read (docs/DELIVERY.md): every pending outbox event — delivered markers plus the self-contained run-failed / intake-rejected / duplicate-skipped / late-bind-ack packets. Route each, then mark_sent (delivered) or ack_event (the rest).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_profiles","description":"List the customer ACCOUNTS the firm runs clearotron clearances for (key + name + industry + their PROJECTS) — the roster the intake step resolves a job's profileKey (and optional projectKey) against. profileKey selects that customer's marketplaces, default classes/jurisdictions, report format and risk posture; a project (spec 62) is an engagement UNDER a customer that overlays its own marketplaces","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_runs","description":"List the searches this session can see (in progress and finished), newest first. A session may hold more than one client, so the list is NOT one client's: every row names the client it was run for, and the project where there is one. TO FIND ONE CLIENT'S SEARCHES, pass `mark` with the client's name — the same name-shaped filter reads the client and the project as well as the mark. TO FIND A SEARCH","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_searches","description":"What the search looked for and where — the searches that came back empty as well as the ones that surfaced something. Each row carries the term, the match shapes tried (exact, fuzzy, phonetic, transliteration…), the classes and jurisdictions, the register office where one was named, and the outcome (no-hit | found | out-of-scope | screened-out | excluded-own-rights | negligible). This is the defen","write_action":false,"price_micros":0,"input_schema":null},{"name":"mark_sent","description":"OPS-ONLY. Integrator write-back after sending a delivered run's packet (docs/DELIVERY.md step 3): writes the .sent idempotency guard, clears status.sendPending, removes the outbox marker. Idempotent — an already-sent run returns ok+alreadySent. SETTLING REQUIRES EVIDENCE: pass messageId or attestation, or the call refuses. Never call this for a send that was blocked or failed — leave the marker so","write_action":false,"price_micros":0,"input_schema":null},{"name":"plan_run","description":"FREE PREVIEW — resolve what a search WOULD do and return it, spending nothing and queueing nothing. Takes the SAME arguments as start_run. Use this BEFORE start_run whenever the requester has not already confirmed the specifics: it reports the PRODUCT that resolves and WHERE it came from (their request, the account default, a saved search, or the territories themselves), the territories and market","write_action":true,"price_micros":0,"input_schema":null},{"name":"read_artifact","description":"Read a run artifact's raw text (or one '# Section', or its front-matter). For briefing a person, the report is the plain-language layer; the rest are internal working documents. Names: report, audit, narrative, registerFindings, commonLaw, placement, matterContext, variantManifest, skepticFlags, seniorEyeReview, caseLaw, clientSummary (internal cover-note source; ops only), a register axis (e.g. p","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_blind_frame","description":"Hand back your cold threat model as VALUES. The driver serializes it and writes","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_clearance_variants","description":"Hand back the variant manifest as VALUES. The driver serialises variant-manifest.json, renders","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_coverage","description":"Record your coverage-ledger rulings as VALUES. The driver writes the form — you never open or edit any","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_coverage_status","description":"Record the status of each row of your coverage ledger. Send VALUES, not a file: one entry per ledger row, and the driver writes the record. Entries that validate are kept even when others in the same call are refused, and a later entry for the same unit replaces the earlier one.","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_declination","description":"Record, per record or page, your decision NOT to deliver something that reached your findings surface.","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_dispositions","description":"Record your meaning rulings. Send VALUES, not a file: one entry per row, and the driver writes the document. You type NO identifier of any kind: give `row_index`, the NUMBER printed beside that obligation in the obligations block, and `receipt_index`, the POSITION of the candidate in that row's own list — the driver resolves both. Rows are validated against THAT row as they arrive, so you learn wh","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_doubt_closure","description":"Record your closure verdicts as VALUES. The driver applies them to the ledgers and renders the","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_frame_diff","description":"Hand back the blind-model-vs-actual-scope diff as VALUES. The driver serializes frame-diff.json","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_knockout_frame","description":"Hand back the batch FRAME as VALUES: the plan, and the scope note. The driver serializes","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_knockout_review","description":"Hand back your REWRITES of the lines a reader meets first, as VALUES. The driver writes them into","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_matter_frame","description":"Hand back the matter frame as VALUES. The driver renders matter-context.md from them — including","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_narrative_refutation","description":"Hand back your verdict and your flags as VALUES. The driver renders senior-eye-review.md — the","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_register_digest","description":"Hand back the register findings as VALUES. The driver renders register-findings.md — the title,","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_released_families","description":"Release the WAITING families on this axis that you decided to ask, each with your reason: why looking wider","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_report_card","description":"Hand back THIS finding's card as VALUES. The driver renders the `### Full detail` section, every","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_report_overview","description":"Hand back the report SHELL as VALUES. The driver renders report-overview.md — the front-matter it","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_skeptic","description":"Hand back your fresh-eyes flags and escalation decisions as VALUES. The driver renders","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_synthesis","description":"Hand back your cross-finding narrative as SECTIONS and your findings as the record they already","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_unit_note","description":"File this axis's SHORT AUDIT NOTE as values. The driver writes register-units/<axis>.md — you never open","write_action":false,"price_micros":0,"input_schema":null},{"name":"record_withheld_families","description":"Record the WAITING families on this axis that you decided NOT to ask, each with your reason. A family you","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_batch_screen","description":"Batch-hydrate SCREENING data for many record_ids in one call, chunked at 100/call. Per row: classes/status/owner/dates/jurisdictions/markFeatures + computed live_status, all_class, and a closed-set screen_verdict (the SAME verdict vocabulary every register provider uses). Pass in_scope_classes. NEVER drop a surface:* / deepfetch:* row on a guess without a record_fetch.","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_enumerate","description":"ENUMERATE a named band to COMPLETION — the completeness primitive. You choose the query (same fields as register_search); this tool owns the count probe, the OR-stack chunking and the screening, and CANNOT return a partial list. It returns ONE of two states: {state:'enumerated', total_hits, count, records[…batch-screened]} when the whole band was retrieved (every named record, already screened wit","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_execute_plan","description":"Execute the run's FROZEN register plan (_driver/register-plan.json) for ONE axis in a single call: the tool runs every dictated entry itself (enumerates to completion; count entries stay count-only crowd descriptors; a when-guarded fringe runs only if its parent slice enumerated) and WRITES the named band to output_path itself, each block stamped with its qid. MERGES with any existing band: your j","write_action":true,"price_micros":0,"input_schema":null},{"name":"register_expand_phoneme","description":"Generate phonetic-variant spellings via Corsearch's AI phoneme expansion. Returns { base, aiVariants }. Call before register_search match_mode='phonetic'. Language matters: en_US/de_DE/fr_FR/it_IT/es_ES.","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_image_fetch","description":"Fetch figurative-mark image metadata (content type + size, presence) for one or more record_ids (synthetic refs or bare guids). Returns a per-guid summary; defaults to test_mode (set test_mode:false for the live image). Only invoke for records whose detail says an image is available.","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_propose_supplemental","description":"PROPOSE judgment-addition register queries; CODE executes them and writes the band (the supplemental lane — you never run register coverage by hand and never author band blocks). Each proposal: {predicate: exact|default|wildcard|phonetic|owner, term OR terms[] (OR-stack, split anything wider than the plan bound), romanization (MANDATORY beside a single non-Latin term — this register indexes non-La","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_record_fetch","description":"Fetch the full NORMALIZED detail record(s) for one or more trademarks by record_id (a synthetic /mark/<office>/<guid> ref OR a bare guid). Batched at EXACTLY 100 ids per call; each normalized record is persisted for the driver's citation-fidelity gate. Returns { count, records[…] } with neutral fields (applicationNumber/registrationNumber/dates/statusClass/niceClasses/owner/seniorities/priorities/","write_action":false,"price_micros":0,"input_schema":null},{"name":"register_search","description":"Search the register index; returns the COMPLETE set of matching records (this provider has no pagination — one call, the whole guid set) whose record_id is a synthetic /mark/<office>/<guid> ref. Provide at least one element (query/name/names, owner/owners, representative) and regions[] (required). match_mode: default (a TRUE contains)|exact|phonetic (native sound-alike; no variant preview exists o","write_action":false,"price_micros":0,"input_schema":null},{"name":"run_changes","description":"Change-feed for monitoring a live run: the timeline events since a timestamp, plus a cursor to poll with. MCP has no push, so poll again with since=cursor. Optional kinds[] to filter event kinds (e.g. ['verdict','skeptic-escalation','failed']).","write_action":true,"price_micros":0,"input_schema":null},{"name":"search","description":"Keyword search across one run's artifacts (single-run scope), ranked. mode 'all' (default) = every query word must appear on the line, any order (so 'MYRKUR similar mark conflict' matches a line about all four); 'any' = ≥1 word, ranked by how many; 'phrase' = the exact substring (old behaviour). Returns {artifact, line, score, snippet}. Optional kind to scope to one artifact.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_run_artifacts","description":"Search ONE of this run's own artifacts (e.g. register-findings.md, common-law-findings.md) for","write_action":true,"price_micros":0,"input_schema":null},{"name":"search_runs","description":"Cross-run search across ALL runs (in-flight + archived) — e.g. 'has the MYRK- root shown up in prior clearances?'. scope: findings (default; the mark/owner/search-term columns — cheapest), audit, key-artifacts (report+registerFindings+commonLaw+narrative), or all-artifacts (full text, most expensive). Same ranked all|any|phrase modes as search. Capped by maxRuns.","write_action":false,"price_micros":0,"input_schema":null},{"name":"server_info","description":"The AGPL §13 source offer: this server's name, version, licence, source repository and the COMMIT IT IS RUNNING. Callable by every session kind — the offer is owed to whoever interacts with the service. Reads no run and no account data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_run","description":"OPS-ONLY. Enqueue a NEW clearance/search run the driver will pick up. Provide markName (or marks[] for a batch) + forwarder (and ideally classes/goods/customer/profileKey/ref). Returns the queue id + slug; the runId/codename is assigned when the runner claims it — poll list_runs (by markName) or run_changes for progress. Spends real money once it runs.","write_action":true,"price_micros":0,"input_schema":null},{"name":"stop_run","description":"OPS-ONLY. Cancel a run. Pass id to remove a not-yet-claimed queued job (a real cancel, no spend). Pass runId to file a cancel request on a started run. By default the cancel is COOPERATIVE — the sentinel is written and a turn already in flight is allowed to finish, which has no deadline: a reasoning turn can run for tens of minutes. Add immediate:true to also end that turn: it is sent a stop, anyt","write_action":true,"price_micros":0,"input_schema":null},{"name":"trace","description":"ENGINEERING/AUDIT view — HOW a conclusion was reached; use only when the user asks how/why, not for briefing findings. Walks the full logic flow from any target (a stage, an artifact name, a finding id, or 'verdict') back through the stage that emitted it (and whether a failover occurred), its inputs (with sha-at-consumption vs now), the audit-trail rationale, search terms + record URL, skeptic es","write_action":false,"price_micros":0,"input_schema":null},{"name":"what_if_plan","description":"DRY-RUN a what-if (no spend), in one of two kinds. kind 'stage' (the default) re-runs a single stage of a LIVE run: what re-runs, the cost prior, what downstream is NOT recomputed, a completeness verdict, and a confirmationToken — pass `stage`, and express the change via instructions (e.g. 'treat ACME as expired') and/or model. kind 'memo' answers a what-if about a DELIVERED report instead: a boun","write_action":false,"price_micros":0,"input_schema":null},{"name":"what_if_result","description":"Collect a QUEUED what-if: its state (queued | running | done | failed) and, once done, the diff against the canonical run. Pass runId and the experimentId what_if_run returned; omit experimentId to list every what-if asked of this run. The original run is never modified — the experiment lives in its own sandbox.","write_action":false,"price_micros":0,"input_schema":null},{"name":"what_if_run","description":"EXECUTE a planned what-if (SPENDS tokens / maybe billed calls): re-runs ONE stage in a sandbox (original untouched) and diffs it. Requires the confirmationToken from what_if_plan. Approval-gated — confirm cost before calling. Over the client connector this QUEUES the experiment on the server and returns an experimentId instead of a diff — pass `runId` too, and collect the result with what_if_resul","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":75,"grade":"B","scanned_at":"2026-10-28T05:56:00.838Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-28T05:56:00.801Z","components":{"code":{"score":15,"max":25,"notes":["1500 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present"},{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present","evidence":"package.json: … \"portal-ui\" ], \"scripts\": { \"preinstall\": \"node scripts/preinstall-node-check.mjs…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"clearotron","version":"0.4.1","found":true,"license":"AGPL-3.0-only","hasInstallScripts":true,"dependencyCount":5,"publishedAt":"2026-10-18T15:00:43.153Z","repositoryUrl":"git+https://github.com/CordilleraSarl/clearotron.git","weeklyDownloads":484}],"repo":{"found":true,"owner":"CordilleraSarl","repo":"clearotron","archived":false,"pushedAt":"2026-10-28T04:04:28Z","stars":2,"forks":0,"openIssues":4,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/307911710?v=4","ownerCreatedAt":"2026-07-22T08:06:33Z","license":"AGPL-3.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/307911710?v=4&s=128","source":"github"},"presence":{"stars":2,"forks":0,"downloadsWeek":484,"license":"AGPL-3.0","lastPushAt":"2026-10-28T04:04:28.000Z","score":33}}}},"grade_history":[],"reviews":[]}