Skip to content

MCP setup

The MCP server lets an AI assistant such as Claude Desktop, Claude Code or Cursor check text for you. Paste the text into the chat and ask for a check, without opening a browser tab.

Install

The server runs over stdio and needs Node 18 or later. It is not on npm yet, so it runs from a local copy of the code, and every snippet below points at the built file. The snippets will change to a package name once it is published. Build it once, then point any client at it. The last line starts the server in your terminal and waits for input, which is what a client does; press Ctrl-C to stop it.

cd /path/to/academic/mcp
npm install
npm run build
node /path/to/academic/mcp/dist/index.js

Claude Desktop

Add this to your Claude Desktop configuration file, then restart the app.

{
  "mcpServers": {
    "human": {
      "command": "node",
      "args": ["/path/to/academic/mcp/dist/index.js"],
      "env": {
        "HUMAN_API_KEY": "your-key-here"
      }
    }
  }
}

Claude Code

Add the server with one command, from any directory.

claude mcp add human --env HUMAN_API_KEY=your-key-here -- node /path/to/academic/mcp/dist/index.js

Cursor

Add this to .cursor/mcp.json in your project, or to Cursor's global MCP settings.

{
  "mcpServers": {
    "human": {
      "command": "node",
      "args": ["/path/to/academic/mcp/dist/index.js"],
      "env": {
        "HUMAN_API_KEY": "your-key-here"
      }
    }
  }
}

An API key

The server needs HUMAN_API_KEY, which you create from the dashboard. API access comes with the Education plan today, and with paid plans once billing starts. A key lasts 90 days and cannot be revoked before then. If one leaks, create a new one and stop using the old one.

The two tools

detect_ai_text takes the text to check and an optional sensitivity. Leave sensitivity out and it uses standard, which flags a paper when more than 6% of it reads as AI-written. accusation-safe flags above 15% and misses more AI-edited text. sensitive flags above 2%; in the default model’s release test it flagged 1 of 600 human-written papers the detector had never been trained on, and the 95% ceiling on that false-flag rate is 0.788%.

detect_ai_text also takes an optional model. Leave it out and it uses standard (Fewer false flags): Flagged none of 600 human-written papers. Called 20 of 176 humanized AI papers human. In a newer test of one humanizer tool, it called 231 of 255 rewritten long papers human. humanizer (Catches more humanizers): Called 8 of 176 humanized AI papers human. In the same newer test, it called 219 of 255 rewritten long papers human. Flagged 2 of 600 human-written papers the default cleared. humanizer runs at the standard sensitivity only; with any other sensitivity the tool refuses before it calls the detector. If humanizer cannot be reached, the tool answers "Not scored". It never shows a reading from the default model under the humanizer name.

The reply gives the verdict (Human, Mixed, AI or Unknown), the word count, the model and the detector run that scored it, and each sentence labeled AI, shortened to its first twelve words. The full response also comes back as structured data, for a client that wants every field.

detector_status takes no input. It reports whether the detector can be reached and which run serves the default model.

Under 50 words

Text under 50 words is not scored. detect_ai_text says so and does not call the detector. From 50 to 149 words, a reading is weak.

When a check fails

The server calls one endpoint. If a request fails for any reason, such as a refused key or a detector that cannot be reached, the tool answers "Not scored" and says why. It never uses a different scorer and never retries. To try again, ask again.

Limits

A flag should be reason to look closer and not verified proof of cheating.