Patent prior art, design-around, patent strategy, legal-citation verification.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Government Form & Procedure Finder (California, San Diego) — Given a plain-language situation (for example a city took belongings in an encampment sweep, a parking ticket, a contractor overcharge), returns the official government or court forms and procedures that apply, each with its official URL, issuer, how and where to file, fee, and the filing deadline computed from a reference date where a rule sets one. Covers California statewide plus the City and C
Plain-language description of what happened or what the person wants to do.
Reference date YYYY-MM-DD, taken as the trigger of each forward deadline rule (incident date, citation date, notice mailing date); each match names its trigger. Rules that count back from a future event (hearing, election) are returned without a date. Omit to get the rules without due dates.
Default 5.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http writerslogic-legal-ip https://agents.writerslogic.com/mcp/legal-ip
Government Form & Procedure Finder (California, San Diego) — Given a plain-language situation (for example a city took belongings in an encampment sweep, a parking ticket, a contractor overcharge), returns the official government or court forms and procedures that apply, each with its official URL, issuer, how and where to file, fee, and the filing deadline computed from a reference date where a rule sets one. Covers California statewide plus the City and C
| Argument | Type | Description |
|---|---|---|
| as_of | string | Reference date YYYY-MM-DD, taken as the trigger of each forward deadline rule (incident date, citation date, notice mailing date); each match names its trigger. Rules that count back from a future event (hearing, election) are returned without a date. Omit to get the rules without due dates. |
| situation* | string | Plain-language description of what happened or what the person wants to do. |
| max_results | integer | Default 5. |
| jurisdiction* | object |
{
"type": "object",
"required": [
"situation",
"jurisdiction"
],
"properties": {
"as_of": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 10,
"description": "Reference date YYYY-MM-DD, taken as the trigger of each forward deadline rule (incident date, citation date, notice mailing date); each match names its trigger. Rules that count back from a future event (hearing, election) are returned without a date. Omit to get the rules without due dates."
},
"situation": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "Plain-language description of what happened or what the person wants to do."
},
"max_results": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Default 5."
},
"jurisdiction": {
"type": "object",
"required": [
"state"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"description": "e.g. San Diego. A city of San Diego implies San Diego County."
},
"state": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Uppercase two-letter state code. Only CA has entries."
},
"county": {
"type": "string",
"maxLength": 100,
"description": "e.g. San Diego. Omit if unknown."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Legal citation and quotation verifier (US case law) — Extracts US reporter citations from a brief (U.S., S. Ct., L. Ed., F., F.2d, F.3d, F.4th, F. Supp., state and regional reporters) and checks each against Harvard's Caselaw Access Project and, when the operator has configured a token, the CourtListener Citation Lookup API. Reports FOUND, MISMATCH (case name, year or circuit differs), NOT_FOUND, AMBIGUOUS, or UNCHECKED with the reason, and never mar
| Argument | Type | Description |
|---|---|---|
| text | string | Brief or memo text. Citations and their case names, court and year are extracted from it. |
| quotes | array | Quotations to find verbatim in the cited opinion. |
| citations | array | Citations to check instead of, or in addition to, text. |
| propositions | array | |
| max_citations | integer | Distinct reporter citations to check. Default 40. |
| check_propositions | boolean | Default false. Runs one optional model call that may only point at a verified passage. |
{
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 64000,
"minLength": 1,
"description": "Brief or memo text. Citations and their case names, court and year are extracted from it."
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"required": [
"citation",
"quote"
],
"properties": {
"quote": {
"type": "string",
"maxLength": 4000,
"minLength": 12
},
"citation": {
"type": "string",
"maxLength": 300,
"minLength": 3,
"description": "Reporter citation the quote is attributed to."
}
},
"additionalProperties": false
},
"maxItems": 40,
"description": "Quotations to find verbatim in the cited opinion."
},
"citations": {
"type": "array",
"items": {
"type": "string",
"maxLength": 300,
"minLength": 3
},
"maxItems": 60,
"description": "Citations to check instead of, or in addition to, text."
},
"propositions": {
"type": "array",
"items": {
"type": "object",
"required": [
"citation",
"proposition"
],
"properties": {
"citation": {
"type": "string",
"maxLength": 300,
"minLength": 3
},
"proposition": {
"type": "string",
"maxLength": 600,
"minLength": 10
}
},
"additionalProperties": false
},
"maxItems": 10
},
"max_citations": {
"type": "integer",
"maximum": 40,
"minimum": 1,
"description": "Distinct reporter citations to check. Default 40."
},
"check_propositions": {
"type": "boolean",
"description": "Default false. Runs one optional model call that may only point at a verified passage."
}
},
"additionalProperties": false
}Patent Design-Around & Freedom-to-Operate Architect — Paste patent claims or give a patent number. Splits the independent claims into lettered limitations in code, charts your product against each one (literal and doctrine of equivalents), scores claims under the all-elements rule, and proposes 3 engineering design-arounds that each remove a limitation of every independent claim, checked in code. Leads with a decision and optional dollar exposure. A
| Argument | Type | Description |
|---|---|---|
| jurisdiction | string | Defaults to US. |
| patentNumber | string | Publication number such as US7629993B2. Used to read the claims from Google Patents when patentClaimsText is omitted. |
| annualRevenueUsd | number | Annual revenue that depends on the product; sizes the dollar exposure in the headline. |
| patentClaimsText | string | Numbered claims (at least the independent claims). Optional when patentNumber is given: the claims are then read from Google Patents. |
| assumedRoyaltyPct | number | Assumed running royalty as a percent of revenue, for the exposure illustration. |
| proposedProductDescription* | string |
{
"type": "object",
"required": [
"proposedProductDescription"
],
"properties": {
"jurisdiction": {
"type": "string",
"maxLength": 40,
"description": "Defaults to US."
},
"patentNumber": {
"type": "string",
"maxLength": 40,
"description": "Publication number such as US7629993B2. Used to read the claims from Google Patents when patentClaimsText is omitted."
},
"annualRevenueUsd": {
"type": "number",
"maximum": 1000000000000,
"minimum": 0,
"description": "Annual revenue that depends on the product; sizes the dollar exposure in the headline."
},
"patentClaimsText": {
"type": "string",
"maxLength": 50000,
"minLength": 20,
"description": "Numbered claims (at least the independent claims). Optional when patentNumber is given: the claims are then read from Google Patents."
},
"assumedRoyaltyPct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Assumed running royalty as a percent of revenue, for the exposure illustration."
},
"proposedProductDescription": {
"type": "string",
"maxLength": 20000,
"minLength": 20
}
},
"additionalProperties": false
}Patent Strategy Pack — Both sides of a blocking patent in one call: pre-priority-date prior art charted against every claim element, and an all-elements freedom-to-operate map with three engineering design-arounds. Runs prior-art-invalidator ($1.00) + patent-design-around ($2.00) in one paid call for 20% less than buying them separately. Charged only when every member succeeds.
| Argument | Type | Description |
|---|---|---|
| jurisdiction | string | Defaults to US. |
| patentNumber | string | Publication number such as US7629993B2. Used to read the claims from Google Patents when patentClaimsText is omitted. |
| priorityDate | string | Earliest effective filing/priority date, YYYY-MM-DD. Only works published strictly before it count. Optional when patentNumber is given; a supplied date wins over the Google Patents date and a disagreement is reported. |
| annualRevenueUsd | number | Annual revenue that depends on the product; sizes the dollar exposure in the headline. |
| patentClaimsText | string | Numbered claims (at least the independent claims). Optional when patentNumber is given: the claims are then read from Google Patents. |
| assumedRoyaltyPct | number | Assumed running royalty as a percent of revenue, for the exposure illustration. |
| proposedProductDescription |
Case-law precedent search (CourtListener, US) — Finds US court opinions most on point for a legal question or fact pattern: searches CourtListener's case-law index (optionally limited to courts and filing dates), reads the top opinions, and returns the best matches with a holding passage verified verbatim against the opinion text, plus citation, court, date, precedential status and a source hash. A second skeptical pass flags matches that look
| Argument | Type | Description |
|---|---|---|
| courts | array | CourtListener court ids such as "scotus", "ca9", "cal", "calctapp". Omit to search all courts. |
| question* | string | The legal issue and key facts. Quote a phrase to require it verbatim in the search. |
| filed_after | string | Earliest filing date, YYYY-MM-DD. |
| max_results | integer | Default 5. |
| filed_before | string | Latest filing date, YYYY-MM-DD. |
| include_excerpts | boolean | Default true. When false, the holding passage text is omitted from the output (quote_verified and quote_offset are still reported). |
{
"type": "object",
"required": [
"question"
],
"properties": {
"courts": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9]{2,20}$"
},
"maxItems": 10,
"description": "CourtListener court ids such as \"scotus\", \"ca9\", \"cal\", \"calctapp\". Omit to search all courts."
},
"question": {
"type": "string",
"maxLength": 2000,
"minLength": 20,
"description": "The legal issue and key facts. Quote a phrase to require it verbatim in the search."
},
"filed_after": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Earliest filing date, YYYY-MM-DD."
},
"max_results": {
"type": "integer",
"maximum": 8,
"minimum": 1,
"description": "Default 5."
},
"filed_before": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest filing date, YYYY-MM-DD."
},
"include_excerpts": {
"type": "boolean",
"description": "Default true. When false, the holding passage text is omitted from the output (quote_verified and quote_offset are still reported)."
}
},
"additionalProperties": false
}Global Prior-Art Patent Invalidator — Screens a patent's claims against scholarly literature published before the priority date (arXiv, OpenAlex, Europe PMC, Crossref, HAL, J-STAGE; English, Chinese, Japanese, German; not patent databases). Give claims plus a priority date, or a patent number to read them from Google Patents. Claims are split into elements in code; every claim-chart quote is verified verbatim against the title or abst
| Argument | Type | Description |
|---|---|---|
| patentNumber | string | Publication number such as US7629993B2. Claims, priority date and cited art are read from Google Patents when the claims or the date are omitted, and the date is cross-checked otherwise. Required unless both patentClaimsText and priorityDate are given. |
| priorityDate | string | Earliest effective filing/priority date, YYYY-MM-DD. Only works published strictly before it count. Optional when patentNumber is given; a supplied date wins over the Google Patents date and a disagreement is reported. |
| patentClaimsText | string | Claims to attack, numbered as in the patent (e.g. "1. A method ..."). Optional when patentNumber is given: the independent claims are then read from Google Patents. A dependent claim is charted with every element of its parents. |
{
"type": "object",
"required": [],
"properties": {
"patentNumber": {
"type": "string",
"maxLength": 40,
"description": "Publication number such as US7629993B2. Claims, priority date and cited art are read from Google Patents when the claims or the date are omitted, and the date is cross-checked otherwise. Required unless both patentClaimsText and priorityDate are given."
},
"priorityDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Earliest effective filing/priority date, YYYY-MM-DD. Only works published strictly before it count. Optional when patentNumber is given; a supplied date wins over the Google Patents date and a disagreement is reported."
},
"patentClaimsText": {
"type": "string",
"maxLength": 20000,
"minLength": 20,
"description": "Claims to attack, numbered as in the patent (e.g. \"1. A method ...\"). Optional when patentNumber is given: the independent claims are then read from Google Patents. A dependent claim is charted with every element of its parents."
}
},
"additionalProperties": false
}Regulatory Change Brief (Federal Register, EDGAR, Dockets) — Given an industry or topic and optional agencies, CFR parts, terms and companies, pulls recent US regulatory changes from official free sources: Federal Register final and proposed rules (with effective dates, comment deadlines and official URLs), SEC EDGAR 8-K items and other filings for named companies, and CourtListener dockets and opinions when the operator has a token. Days remaining are comp
| Argument | Type | Description |
|---|---|---|
| focus | string | Weights ranking and the impact assessment toward operations, reporting or enforcement. |
| terms | array | Federal Register search phrases, e.g. "data breach notification". |
| agencies | array | Agency names, acronyms or Federal Register slugs, e.g. "SEC", "Environmental Protection Agency". |
| industry | string | Industry or topic, e.g. "community banks offering consumer credit". Used to plan searches and to judge impact. |
| cfr_parts | array | CFR parts, e.g. "17 CFR 240" or "40 CFR 60". |
| companies | array | Company names, tickers or CIKs whose recent SEC filings (8-K items, 10-K/Q) to list. |
| sic_codes | array | SIC codes; industry context only, registrants are not enumerated by SIC. |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 15, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| string |
{
"type": "object",
"required": [
"proposedProductDescription"
],
"properties": {
"jurisdiction": {
"type": "string",
"maxLength": 40,
"description": "Defaults to US."
},
"patentNumber": {
"type": "string",
"maxLength": 40,
"description": "Publication number such as US7629993B2. Used to read the claims from Google Patents when patentClaimsText is omitted."
},
"priorityDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Earliest effective filing/priority date, YYYY-MM-DD. Only works published strictly before it count. Optional when patentNumber is given; a supplied date wins over the Google Patents date and a disagreement is reported."
},
"annualRevenueUsd": {
"type": "number",
"maximum": 1000000000000,
"minimum": 0,
"description": "Annual revenue that depends on the product; sizes the dollar exposure in the headline."
},
"patentClaimsText": {
"type": "string",
"maxLength": 50000,
"minLength": 20,
"description": "Numbered claims (at least the independent claims). Optional when patentNumber is given: the claims are then read from Google Patents."
},
"assumedRoyaltyPct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Assumed running royalty as a percent of revenue, for the exposure illustration."
},
"proposedProductDescription": {
"type": "string",
"maxLength": 20000,
"minLength": 20
}
},
"additionalProperties": false
}| window_days |
| integer |
| Publication window ending today, 1 to 180 days (default 30). Proposed rules published earlier whose comment period is still open are also included. |
{
"type": "object",
"properties": {
"focus": {
"enum": [
"operations",
"reporting",
"enforcement"
],
"type": "string",
"description": "Weights ranking and the impact assessment toward operations, reporting or enforcement."
},
"terms": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"minLength": 2
},
"maxItems": 5,
"description": "Federal Register search phrases, e.g. \"data breach notification\"."
},
"agencies": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 2
},
"maxItems": 5,
"description": "Agency names, acronyms or Federal Register slugs, e.g. \"SEC\", \"Environmental Protection Agency\"."
},
"industry": {
"type": "string",
"maxLength": 400,
"minLength": 3,
"description": "Industry or topic, e.g. \"community banks offering consumer credit\". Used to plan searches and to judge impact."
},
"cfr_parts": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40,
"minLength": 2
},
"maxItems": 5,
"description": "CFR parts, e.g. \"17 CFR 240\" or \"40 CFR 60\"."
},
"companies": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 2
},
"maxItems": 5,
"description": "Company names, tickers or CIKs whose recent SEC filings (8-K items, 10-K/Q) to list."
},
"sic_codes": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9]{4}$"
},
"maxItems": 5,
"description": "SIC codes; industry context only, registrants are not enumerated by SIC."
},
"window_days": {
"type": "integer",
"maximum": 180,
"minimum": 1,
"description": "Publication window ending today, 1 to 180 days (default 30). Proposed rules published earlier whose comment period is still open are also included."
}
},
"additionalProperties": false
}