Skip to content

app-store: add General Legal — attorney contract review + Delaware formation - #226

Open
Alexgodoroja wants to merge 2 commits into
mainfrom
app-store/io.pilot.generallegal
Open

app-store: add General Legal — attorney contract review + Delaware formation#226
Alexgodoroja wants to merge 2 commits into
mainfrom
app-store/io.pilot.generallegal

Conversation

@Alexgodoroja

Copy link
Copy Markdown
Collaborator

Adds io.pilot.generallegal to the app store. General Legal is a YC-backed
law firm; the app puts attorney contract review and Delaware company
formation behind one namespace.

What's here

  • App record sourced from appstore-meta/data/apps/io.pilot.generallegal.json
    in pilot-protocol/app-template (seeded in a companion PR) and mirrored into
    the committed src/data/app-metadata.json snapshot. 19 methods.
  • Category: work (Work & Research — "put real-world work in motion and get
    real answers back, human hands on a task"). That is what this is: a licensed
    attorney doing the work, not a model.
  • Pinned first in New & Updated via freshPinned.
  • Icon taken from general.legal's own brand asset, plus the 96/240 webp
    variants site-integrity requires. It is a white mark on a dark tile, so it
    reads on both light and dark grounds.

A new billable field, and why not gated

The metadata already had a per-method gated field, but it means your plan
does not include this
— the app page renders it as "requires an upgrade".
These methods are not plan-gated: they work, and they charge you. Using gated
would tell agents something false in both directions.

So methods now carry a separate billable string (the price), and the app page
renders a distinct paid badge alongside it. Five methods spend real money:

Method Cost
deal_open / document_upload $250 (≤3 pages), $500 (3–50), $10/page (50+), $2,000 to draft
thread_post covered by the matter's flat fee
formation_start_llc $190 instant / $210 standard / $260 next-day / $310 same-day
formation_start_c_corp $218 standard / $268 next-day / $318 same-day

Everything else is free.

Getting-started instructions on the app page

Both halves need a General Legal account. The two authenticate differently, and
the page walks each: contract review needs an API key minted at
portal.general.legal/api-keys and imported into $APP/secrets.json (with the
restart, which matters — the key is read at startup); formation needs no key or
secret on the user's side.

Note for the reviewer

src/pages/plain/app-store.astro has its plain-source-sha256 re-stamped
rather than regenerated
regen-plain.mjs needs GEMINI_API_KEY, which I
don't have. The only change to the source is one id added to the freshPinned
array, and the plain page is static prose with no app data, so its output
cannot change. Re-run regen-plain.mjs if you'd prefer it properly regenerated.

Verification

  • npm run build — 409 pages, clean
  • check-site-integrity.mjs — 410 HTML files, 33,370 internal refs, OK
  • check-plain-coverage.mjs — 97 pairs, 45 stamped twins in sync, OK
  • App page renders 5 paid badges with prices; 3 cards on /app-store (New &
    Updated, Work & Research, all-apps grid)

…rmation

Adds io.pilot.generallegal to the app store: a licensed US law firm's
contract review API plus Delaware company formation, in one namespace.

- app record from the app-store metadata API snapshot (19 methods)
- category: work (Work & Research) — real-world work with human hands on it
- pinned first in New & Updated
- vendor icon from general.legal, plus the 96/240 webp variants

Also carries per-method pricing through to the store page. The metadata
already had a `gated` field, but gated means "your plan does not include
this"; these methods work and charge you. Conflating the two misleads in
both directions, so methods now carry a separate `billable` string and
the app page renders a distinct `paid` badge with the price.

Five methods spend money and say so: formation_start_llc,
formation_start_c_corp, deal_open, document_upload, thread_post.

The plain twin's sha is re-stamped rather than regenerated: regen-plain
needs GEMINI_API_KEY, and the only source change is one id added to the
freshPinned array, which the plain page (static prose, no app data)
cannot render. Re-run regen-plain if you'd rather it be regenerated.
@github-actions

github-actions Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

🚀 Preview deployed to Cloudflare Pages

  • Commit deploy URL: https://2799e749.pilotprotocol.pages.dev
  • Branch alias: https://app-store/io.pilot.generallegal.pilotprotocol.pages.dev (may take ~30s to propagate)
  • Commit: f1927d56a964a16f8ecc5d937a8d5acbb5b5a60b

The first version said company formation requires a General Legal account
authenticated over OAuth 2.1. That was wrong, and the error was mine: the
OAuth claim comes from legalmcp.org, which documents mcp.general.legal (the
contract-review server) — a different host from the formation service.

Verified against the live formation endpoint:

  - all five .well-known OAuth discovery paths return 404
  - unauthenticated initialize returns 200 and issues a session id
  - no WWW-Authenticate header
  - a WRITE tool called anonymously reaches schema validation and returns
    field errors, not an auth error — an auth gate would fire first

By contrast mcp.general.legal returns 401 on plain initialize and its
discovery endpoint points at Clerk. So formation is genuinely open, exactly
as General Legal described it.

The page now says: formation needs no account, no key and no configuration
(you still pay at the returned link, and it files a real company); contract
review needs an account and an imported API key. The billable warnings are
unchanged.
@Alexgodoroja

Copy link
Copy Markdown
Collaborator Author

Correction pushed — the formation auth story was wrong

The first version of this PR claimed company formation requires a General Legal
account authenticated over OAuth 2.1. That was wrong. I took the OAuth line
from legalmcp.org, which documents mcp.general.legal — the contract-review
server — and applied it to the formation service, which is a different host.

Verified directly against the live formation endpoint:

Probe incorp-mcp.general.legal mcp.general.legal
OAuth discovery (5 well-known paths) all 404 200, points at Clerk
Unauthenticated initialize 200 + session id 401
WWW-Authenticate absent
Write tool, anonymous reaches schema validation

The last row settles it: start_llc_formation with an empty intake returns
field-validation errors, not an auth error. An auth gate would fire before
validation, so there is no gate — matching how General Legal described it
("open to your agents with no login required").

The page now reads:

  • Company formation — no account, no key, no configuration. You still pay
    at the returned link, and it files a real Delaware company.
  • Contract review — General Legal account + an API key imported into
    $APP/secrets.json, with the restart.

Billable warnings and prices are unchanged. Build, site-integrity and
plain-coverage all still pass.

Worth flagging to General Legal: an open write endpoint that files real
companies is a surprising thing to ship. If they intend to close it, our
generated tool client has no OAuth flow yet, so the formation methods would
break the day it turns on.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant