Atlas / MCP servers / nottelabs / Notte

NotteBLOCK

mcp/nottelabs/notte

Cloud browser infrastructure and web automation platform for your AI and coding agents

Verdict
BLOCK
Grade
F
Trust score
33 /100
Exposed tools
2 2r · 0w · 0d
Transport
streamable-http
License
NOASSERTION
Stars
2,002
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

The web agent framework built for speed, cost-efficiency, scale, and reliability → Read more at: open-operator-evals • X • LinkedIn • Landing • Console

[](https://github.com/nottelabs/notte/stargazers) [](https://spdx.org/licenses/SSPL-1.0.html) [](https://www.python.org/downloads/) [](https://pypi.org/project/notte/) [](https://pepy.tech/projects/notte)

What is Notte?

Notte provides all the essential tools for building and deploying AI agents that interact seamlessly with the web. Our full-stack framework combines AI agents with traditional scripting for maximum efficiency - letting you script deterministic parts and use AI only when needed, cutting costs by 50%+ while improving reliability. We allow you to develop, deploy, and scale your own agents and web automations, all with a single API. Read more in our documentation here 🔥

Opensource Core:

Read from source at commit 8d1d53d4d1bfOBSERVED · 2026-09-23
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add notte-sdk --env ANCHOR_API_KEY=${ANCHOR_API_KEY} --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env API_KEY=${API_KEY} --env AUTO_ISSUES_GITHUB_MFA_SECRET=${AUTO_ISSUES_GITHUB_MFA_SECRET} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "notte-sdk": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "ANCHOR_API_KEY": "${ANCHOR_API_KEY}",
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "API_KEY": "${API_KEY}",
        "AUTO_ISSUES_GITHUB_MFA_SECRET": "${AUTO_ISSUES_GITHUB_MFA_SECRET}"
      }
    }
  }
}
03

Exposed tools (2)

2 read · 0 write · 0 destructive.

ToolRiskDescription
EchoreadEchoes its input
ExamplereadTest
04

Trust audit

BLOCKgrade F · trust 33/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
none-observed
Shell
declared (6 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/notte-core/src/notte_core/ast.py:821
exec(parsed_info.code, execution_globals, result)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/notte-core/src/notte_core/ast.py:844
exec(parsed_info.code, execution_globals)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
tests/data/checkout/arhaus.html:1
<!DOCTYPE html><html lang="en-US" dir="ltr"><head>
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
tests/data/checkout/californiadesignden.html:1
<!DOCTYPE html><html lang="en-US" dir="ltr" style="background-color: rgb(250, 250, 250);"><head>
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
tests/data/checkout/joybird.html:1
<!DOCTYPE html><html lang="en" class="TridactylThemeDefault wf-interstate-n4-active wf-interstate-i4-active wf-interstate-i5-active wf-interstate-n5-active wf-adobehandwritingernie-n4-active wf-active
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
tests/data/checkout/society6.html:1
<!DOCTYPE html><html lang="en-US" dir="ltr" style="background-color: rgb(255, 255, 255);"><head>
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
HIGHPrompt injection · prompt.zero_width · CWE-94, CWE-1427
tests/data/checkout/urbanoutfitters.html:1
<!DOCTYPE html><html lang="en"><head class="js-pwa-async-styles-container">
Why it matters. invisible characters in instruction text
Fix. strip non-printing characters
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/notte-core/src/notte_core/utils/OpenSansEmoji.otf
OpenSansEmoji.otf
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
packages/notte-core/src/notte_core/ast.py:731
return __import__(name, *args, **kwargs)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
packages/notte-core/src/notte_core/ast.py:746
return __import__(name, *args, **kwargs)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
packages/notte-core/src/notte_core/browser/observation.py:388
_ = importlib.import_module(module)
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/notte-core/src/notte_core/browser/dom_tree.py:753
emojis.append("👁️🗨️")
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/notte-integrations/src/notte_integrations/notifiers/README.md:56
token="xoxb-your-token-here",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/notte-integrations/src/notte_integrations/notifiers/README.md:102
token="your-discord-bot-token-here",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/integration/test_telemetry.py:25
secret = "delivery-boundary-secret"  # noqa: S105  # pragma: allowlist secret
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
packages/notte-integrations/src/notte_integrations/notifiers/README.md:56
token="xoxb-your-token-here",
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coderabbit.yaml
.coderabbit.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitmodules
.gitmodules
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/src/.mintignore
.mintignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node-sdk/scripts/generate-resources.test.mjs:39
new Function('require', 'exports', js)(() => ({ sessionExample: async options => {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
build.sh:26
cd ../../
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/src/sniptest/check_typescript.mjs:7
const require = createRequire(new URL('../../../node-sdk/package.json', import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/src/sniptest/typescript-loader.mjs:4
return { url: new URL('../../../node-sdk/dist/index.mjs', import.meta.url).href, shortCircuit: true };
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/src/sniptest/typescript-loader.mjs:11
parentURL: new URL('../../../node-sdk/package.json', import.meta.url).href,

Gates applied: no_behavioural_pass.

Audited 2026-09-23 · audit v0.4.1 · source sha 8d1d53d4d1bffull audit observations/trust-audit/mcp-server/nottelabs__notte.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-09-238d1d53d4d1bfBLOCKF33source changed, verdict held
2026-09-19989164f6a0c8BLOCKF33first audit
06

Questions

What is the Notte MCP server?

Cloud browser infrastructure and web automation platform for your AI and coding agents

What tools does Notte expose?

2 in total: 2 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Notte safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (33/100) and found 7 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Notte need?

It reads ANCHOR_API_KEY, ANTHROPIC_API_KEY, API_KEY, AUTO_ISSUES_GITHUB_MFA_SECRET, AUTO_ISSUES_GITHUB_PASSWORD, BROWSERBASE_API_KEY, EMAIL_PASSWORD, GITHUB_COM_PASSWORD, GOOGLE_APPLICATION_CREDENTIALS, HYPERBROWSER_API_KEY, MASSIVE_PASSWORD and MY_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Notte run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as notte-sdk at 0.0.0-dev.

How current is this page?

The grade is for one exact copy of the source (8d1d53d4d1bf), read on 2026-09-23. The repository is watched and re-audited when it changes.

Advertisement