Skip to content
netweft

An agent can read the whole workspace and move nothing.

netweft is an SEO MCP server: Claude, Cursor or any MCP client reads a workspace's projects, keywords, rank tracking, site audits and context through 25 read-only tools under a scoped API key. Every tool on this surface is read-only over rows netweft has already stored. Nothing here writes, nothing here starts a crawl, and nothing here spends a credit — so handing an agent a key cannot move the balance, which is the property that makes handing one over reasonable in the first place.

tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_rank_trend",
    "arguments": { "projectId": "…", "keyword": "site audit tool" }
  }
}
25 tools — none of them spends a credit

Connect Claude, Cursor or any MCP client.

Create a key under Settings, then API keys. A client that speaks HTTP points at https://api.netweft.com/mcp with the key in the Authorization header. A client that only starts local servers, such as Claude Desktop, runs netweft-mcp from npm, which relays to the same endpoint.

Setup for Windsurf, Codex CLI, Gemini CLI and the rest
claude mcp add --transport http netweft https://api.netweft.com/mcp \
  --header "Authorization: Bearer $NETWEFT_API_KEY"
The key stays in your environment, never in the snippet

A scope withholds a subject, not a capability.

Because no tool can do anything but read, narrowing a key does not take away an ability — it takes away a subject. The useful one is billing: it is how a key handed to an outside integration is stopped from reading what the workspace is paying and what it has left. A key with no scopes named gets all 6.

Projects

scope: projects

Projects, their overviews and who the key belongs to

whoami
Which workspace the key belongs to, and what it may read.
list_projects
Every project in the workspace.
get_project
One project's domain, market and settings.
get_project_overview
The dashboard's own summary of a project, as one object.

Rank tracking

scope: rank_tracking

Rank trackers, tracked keywords and their results

list_rank_trackers
The trackers configured on a project.
get_rank_tracker
One tracker's schedule, market and device.
list_tracked_keywords
The keyword set a tracker checks.
get_latest_rank_results
The most recent check, with each keyword's position.
get_rank_trend
A keyword's positions over time, as stored observations.
get_rank_position_matrix
Every tracked keyword against every check date, in one grid.
get_keyword_rank_history
One keyword's whole record, including the weeks it did not rank.
estimate_rank_check_cost
What a check would cost in credits. It estimates; it does not run.

Site audit

scope: audit

Site audits, their issues and the pages they crawled

list_audits
Audit runs against a project, newest first.
get_audit
One run's status, page count and issue totals.
list_audit_issues
The issues found, classified by severity.
list_audit_pages
The pages crawled, with what was found on each.

Keywords

scope: keywords

Saved keywords and their tags

list_saved_keywords
Keywords saved against a project, with their metrics.
list_keyword_tags
The tags a project uses to group them.

Context

scope: context

Project context, competitors, key pages and backlinks

get_project_context
What the project has been told about itself.
list_competitors
The domains the project is measured against.
list_key_pages
The pages the project cares about.
list_research_log
What has been researched against the project, and when.
list_backlink_snapshots
Stored backlink summaries, by the date they were taken.

Billing

scope: billing

The workspace's credit balance and subscription

get_credit_balance
Plan credits, top-up credits and what is reserved.
get_subscription
The plan, its period and its limits.

What a key is, exactly.

Shown once

A key is displayed at creation and never again. Only its SHA-256 hash is stored, and the comparison on every request is constant time. A lost key is replaced, not recovered.

Narrowed before it is shown

Scopes are chosen when the key is created, from audit, billing, context, keywords, projects, rank_tracking. A scope this build does not recognise is dropped rather than honoured, so a row written by a newer deploy cannot widen a key here.

Revoked, not deleted

Revoking a key stops it working and leaves the row in place, so the audit log still shows that it existed and what it could reach. Deleting it would remove the evidence along with the access.

Throttled on its own

Requests are counted against the key's public prefix rather than the workspace, so one misbehaving integration does not fill the window for every other key the workspace issued.

The HTTP API, its OpenAPI document and its error contract

Point an agent at it and watch the balance not move.

Keys are created in the dashboard, scoped before they are shown, and revocable from the same screen.

There is no free tier. Three plans from $50 a month, each opening with a free trial.