Scope

io.github.LAHutchins91v1.0.1Updated Oct 5, 2026

Approved freelance scope, rates, deadlines, and change orders, shared with AI assistants over MCP.

VerifiedStreamable HTTPWeb executableBusiness & CommerceProductivity & Workflow

Overview

AI-generated overview

Lets an assistant read a freelancer's approved scope, rates, deadlines, and change orders before answering, and file changes only with explicit approval.

What it does
Scope stores a freelancer's approved engagement record and exposes tools to list and create engagements, read the approved record, save scope items, rates, and deadlines, approve scope, and file or approve change orders. The intended read is get_approved_record before the assistant answers, so it cannot invent a discount or promise unapproved work. Once scope is approved, saving a lower rate or new work is refused and must go through a change order that the user explicitly approves.
When to use it
Useful for freelancers and small studios who want an AI assistant to answer client questions from an approved contract record rather than guessing. Worth adding when the assistant drafts proposals, quotes, or client replies that must stay within agreed scope, rates, and deadlines.
Requirements
A remote endpoint at the provider's URL, or a self-run server started with npm (install, build, start) that serves Streamable HTTP on port 3000 or speaks MCP over stdio. Sign-in through OAuth with a Scope account; Pro subscription or active trial for tool calls. Self-hosting needs server-side variables including APP_BASE_URL, SUPABASE_URL, SUPABASE_ANON_KEY, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, and Stripe price ids, plus SCOPE_DATA_PATH to relocate the JSON record file.
Before you install
Tool calls require an account with active or trialing subscription status, and a new subscription starts a 14-day trial with billing terms shown at checkout. Self-hosting requires secrets such as SUPABASE_ANON_KEY, STRIPE_SECRET_KEY, and STRIPE_WEBHOOK_SECRET, which belong on the server process, not in MCP headers. Tools write records: engagements, scope items, rates, deadlines, and change orders, and approvals change the committed record. Records are stored in a JSON file owned by one server…

Installation

In SourceWeft

  1. Open Scope in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "scope": {
      "type": "http",
      "url": "https://scope-continuity2.vercel.app/mcp"
    }
  }
}

README

Scope

Scope keeps a freelancer's approved scope, rates, deadlines, and change orders, then lets an assistant read that record before it answers. An assistant cannot invent a discount or promise work that was not approved.

It works with ChatGPT, Claude, Gemini, Grok, and Cursor, plus any other MCP client that can do Streamable HTTP and OAuth. It is not a ChatGPT-only plugin.

Sign in with your Scope account when the assistant opens OAuth. Do not paste an API key or password into a header. Scope supports dynamic client registration: leave the client id and secret empty. The protected-resource metadata at /.well-known/oauth-protected-resource/mcp points clients at the OAuth issuer, which registers them.

Scope tools need Pro or an active trial. A new subscription includes a 14-day trial. This page does not list an amount. Checkout shows the billing interval and payment terms.

Run the server yourself and use the base URL you configure. The default local MCP address is http://127.0.0.1:3000/mcp.

What the assistant can do

After you approve the connection, the server exposes these tools:

  • list_engagements
  • create_engagement
  • get_approved_record
  • save_scope_item
  • save_rate
  • save_deadline
  • approve_scope
  • file_change_order
  • approve_change_order

get_approved_record is the read the assistant should do before it answers. Draft terms are not an approved commitment. A proposed change order does not change the record. After the scope is approved, save_rate refuses a lower rate, and save_scope_item refuses new work. Those changes go through file_change_order and then approve_change_order, and only when you explicitly approve that order.

The assistant only calls these tools when you and the host allow it.

Connect

Cursor, in ~/.cursor/mcp.json or a project .cursor/mcp.json:

json
{  "mcpServers": {    "scope": {      "url": "http://127.0.0.1:3000/mcp"    }  }}

Do not add a headers block. Cursor registers a client and opens sign-in.

Claude Code:

bash
claude mcp add --transport http scope http://127.0.0.1:3000/mcp

Do not pass an Authorization header. Other clients use the same address, choose OAuth, and leave client id and secret empty. Steps for ChatGPT, Claude, Gemini, Grok, and Cursor are on the connect page at /connect.

Registry metadata for this server is in server.json (io.github.LAHutchins91/scope). The public remote URL there is https://scope-continuity2.vercel.app/mcp.

Run

bash
npm installnpm testnpm run typechecknpm run buildnpm start

When stdin is a terminal, Scope serves Streamable HTTP on port 3000. When stdin is not a terminal, it speaks MCP over stdio and still opens the HTTP port. Logs during stdio mode go to stderr so they do not mix with the protocol.

Records are stored durably in a JSON file. The default path is ~/.scope/scope.json. Set SCOPE_DATA_PATH to move it. One server process owns that file.

OAuth uses the same idea as a Supabase authorization server with dynamic client registration. Set these on the server process, not in an MCP header:

  • APP_BASE_URL (default http://localhost:3000)
  • SUPABASE_URL
  • SUPABASE_ANON_KEY
  • STRIPE_SECRET_KEY
  • STRIPE_WEBHOOK_SECRET
  • STRIPE_PRICE_MONTHLY and STRIPE_PRICE_YEARLY (Stripe catalog ids, not amounts)

Tool calls other than discovery require a signed-in account whose subscription status is active or trialing.

Source: README.md at commit 676c681

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v1.0.1LatestOct 5, 2026