프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

NetLens

제작자: pzalutski-pixel버전 0.2.3i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.pzalutski-pixel/netlens

설치

개요

제작자가 쓴 설명(영어 원문)

Read any web page as clean, ad-stripped Markdown past robots.txt and bot blocks, plus web search.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 웹 및 브라우저

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 직접 입력할 값: NETLENS_SEARCH_ENGINE, NETLENS_SEARXNG_URL

필요한 것

  • npmNode.js 설치(npx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "netlens": {
      "command": "npx",
      "args": [
        "-y",
        "netlens-mcp"
      ],
      "env": {
        "NETLENS_SEARCH_ENGINE": "your-value",
        "NETLENS_SEARXNG_URL": "your-value"
      }
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add netlens --env NETLENS_SEARCH_ENGINE=your-value --env NETLENS_SEARXNG_URL=your-value -- npx -y netlens-mcp

실행하기 전에 빈 값을 채워 주세요.

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "netlens": {
      "command": "npx",
      "args": [
        "-y",
        "netlens-mcp"
      ],
      "env": {
        "NETLENS_SEARCH_ENGINE": "your-value",
        "NETLENS_SEARXNG_URL": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "netlens": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "netlens-mcp"
      ],
      "env": {
        "NETLENS_SEARCH_ENGINE": "your-value",
        "NETLENS_SEARXNG_URL": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

직접 입력할 값

  • NETLENS_SEARCH_ENGINE env
    Default search backend: auto, duckduckgo, bing, mojeek, or searxng
  • NETLENS_SEARXNG_URL env
    Base URL of a SearXNG instance to use when engine=searxng (e.g. https://searx.example.org)

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 9일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 pzalutski-pixel 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

웹 및 브라우저 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 1392개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 1392개 중 19%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 1392개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

NetLens, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.2.3)은 3개월 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js, Python (uv)도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Browser Use, Chrome DevTools MCP, MCP Server Browser

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Browser Use

Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.

제작자: browser-use널리 사용됨↓ 155.2만/주★ 12만19일 전 업데이트

컴퓨터 또는 클라우드✓ browser-use.com

Chrome DevTools MCP

MCP server for Chrome DevTools

제작자: ChromeDevTools널리 사용됨↓ 188.4만/주★ 5.5만17일 전 업데이트

내 컴퓨터에서 실행

MCP Server Browser

MCP server for browser use access

제작자: bytedance널리 사용됨↓ 792/주★ 4만14개월 전 업데이트

내 컴퓨터에서 실행

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

NetLens

An MCP server for unobstructed web reading. It fetches any URL directly with browser-like headers — past robots.txt and naive bot blocks — and returns the full page as clean, ad-stripped Markdown, not a summary. Plus web search that returns real links. Zero dependencies: pure Python standard library.

Built for AI Agents

AI agents constantly hit pages their built-in tools can't read. NetLens fixes the three usual reasons a fetch comes back empty or useless:

Native web toolsNetLens
Honor robots.txt, so crawler-disallowed pages return nothingReads like the browser you'd open yourself — doesn't consult robots.txt
Blocked by header/User-Agent bot filters (403/202 to non-browser clients)Sends real browser headers via the system curl; commonly turns 403 → 200
Return a summary of the pageReturns the full page content as Markdown
Leave ads, cookie banners, nav, and related-links chrome in the outputStrips boilerplate locally so only the content reaches your context

It does not try to defeat JavaScript/Cloudflare challenge pages or CAPTCHAs — that's out of scope by design. When a page is a hard block, the HTTP status is surfaced honestly rather than faked.

Installation

npm (via npx):

{

"mcpServers": { "netlens": { "command": "npx", "args": ["-y", "netlens-mcp"] } } }

PyPI (via uvx):

{

"mcpServers": { "netlens": { "command": "uvx", "args": ["netlens-mcp"] } } }

Add either to your MCP client config (e.g. .mcp.json for Claude Code), then restart the session so the tools load.

Tools

web_search

Search the web and return real result links (title, URL, snippet), parsed locally — links, not summaries. Follow up with web_fetch to read a result.

ArgumentTypeDescription
querystring (required)The search query
limitintegerOptional cap; default returns the full first page (~10)
enginestringauto (default), duckduckgo, bing, mojeek, searxng
pageintegerResult page, 1-based. SearXNG only
time_rangestringday, week, month, year. SearXNG only
categoriesstringe.g. it, science, news. SearXNG only

The result reports which engine answered and what happened to any that were skipped, so falling through to a different backend is visible rather than silent:

{

"query": "…", "engine": "mojeek", "results": [ … ], "engines_skipped": [ { "engine": "duckduckgo", "outcome": "HTTP 202" } ] }

Outcomes are observations, not conclusions — HTTP 202 is what the server sent; whether that is throttling, changed markup or genuinely no matches cannot be determined from the response. With SearXNG configured, direct answers, infoboxes and suggestions appear alongside the results.

A search fetches a single result page (~10 results), returned in full by default so nothing at position 9/10 is dropped. There's no deep pagination — if the answer isn't in the first page, refine the query.

web_fetch

Fetch any page and return its full content as clean Markdown.

ArgumentTypeDescription
urlstring (required)URL to fetch (scheme optional; https assumed)
modestringarticle (main content only, default), full (whole body), raw (unconverted HTML), outline (heading structure)
sectionstringReturn only this heading's content, plus anything nested under it
linksstringinline (default) keeps link targets; none keeps link text but drops URLs
max_charsintegerOptional cap on returned characters (truncates with a note)
Reading part of a long page

A large article can be tens of thousands of characters when you want one part of it. mode="outline" returns its shape, and section returns just that piece — on a large encyclopedia article that is 153,000 characters full, 1,000 as an outline, and 7,400 for the section actually wanted.

web_fetch(url=…, mode="outline")      → headings with each section's size

web_fetch(url=…, section="Gameplay") → that section and its subsections

On link-heavy pages the URLs themselves are a large share of the output — around 40% of a big encyclopedia article — so links="none" roughly halves it when you only need the prose. Links pointing back into the same page are always rendered as plain text.

If a page turns out to be a client-rendered shell, web_fetch says so rather than returning an empty result as a success:

_(note: Only 10 characters of readable text were found in 6,856 characters of HTML.

This page appears to be rendered client-side by JavaScript…)_

Workflow: web_search to find pages, then web_fetch to read them.

Search engines

Search is a pluggable, selectable registry. In auto mode NetLens tries engines in order and returns the first with results, so a rate-limit/challenge page on one falls through to the next.

EngineNotes
duckduckgoDefault; html.duckduckgo.com endpoint
bingAutomatic fallback
mojeekIndependent index; automatic fallback
searxngSelf-hosted/public SearXNG JSON API — set NETLENS_SEARXNG_URL

Pick per call with the engine argument, or set a default with NETLENS_SEARCH_ENGINE.

Configuration

Environment VariableDefaultDescription
NETLENS_SEARCH_ENGINEautoDefault search backend
NETLENS_SEARXNG_URL—SearXNG base URL, e.g. http://192.168.1.10:8888
NETLENS_SEARXNG_TIMEOUT8Seconds before an unreachable SearXNG is skipped
NETLENS_USER_AGENTChrome UAOverride the request User-Agent
NETLENS_MAX_BYTES10485760Cap on a single response; larger ones are truncated
NETLENS_CACHE_TTL300Seconds to reuse a fetched page; 0 disables caching
NETLENS_HOST_DELAY0.5Minimum seconds between requests to the same host
NETLENS_REQUEST_TIMEOUT120Ceiling on a single tool call
Self-hosted SearXNG

Point NETLENS_SEARXNG_URL at an instance with the JSON API enabled (search.formats must include json in its settings.yml). It is then tried first in auto mode, which removes the HTML scraping — and the rate limiting that comes with it — from the common path.

Because it is tried first, it must fail fast when the box is off: the connect timeout is bounded separately so an unreachable instance is skipped in a few seconds rather than stalling every search, and the skip is reported in the result.

How it works

  • Direct fetch. Requests go straight to the target site via the system curl (better TLS/HTTP-2/compression, so it looks like a real browser), falling back to urllib. No third-party proxy or reader is involved.
  • Local conversion. HTML → Markdown happens in-process with a hand-rolled html.parser converter — headings, lists, links (relative URLs resolved), code blocks, and GFM tables with colspan/rowspan.
  • Content selection, not deletion. NetLens picks the page's main content region — the HTML5 landmark ( / / [role=main]) when one exists, otherwise the subtree holding the most prose relative to its link density — and converts only that. Because it *selects* a winner rather than deleting anything that matches a name pattern, extraction cannot silently return an empty page. Nothing inspects CSS class or id names to decide what is content.
  • Pruning by measurement. Within that region, blocks that are overwhelmingly link anchors (navboxes, tag clouds, "more from this site" grids) are dropped based on their link density. Non-rendering elements ( , , …), explicitly hidden elements, and third-party ad-network slots (identified by vendor names like adsbygoogle, which cannot collide with real prose) are removed outright.
  • Response charset is honored (from Content-Type or ), so non-UTF-8 pages don't come back garbled.

Usage from the CLI

The server is also a plain script — handy for testing before a client loads it:

python -m netlens_mcp.server search "http caching best practices"

python -m netlens_mcp.server fetch https://example.com/article python -m netlens_mcp.server full https://example.com # whole body python -m netlens_mcp.server raw https://example.com # unconverted HTML

python -m netlens_mcp runs the stdio MCP server; python -m netlens_mcp.server runs the CLI.

Development

pip install -e ".[dev]"

python -m pytest # run the test suite ruff check . # lint

Requirements

  • Python 3.10+ (and the system curl, which ships with modern Windows/macOS/Linux; falls back to urllib if absent)

License

Apache License 2.0 — see LICENSE and NOTICE.

PopNx에게 묻기