ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Secobserve MCP

โดย nh4ttruongรุ่น 1.0.0i★ –iรันบนเครื่อง
ชื่อใน registryio.github.nh4ttruong/secobserve-mcp

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

MCP server for SecObserve: triage findings, import scan reports and SBOMs, generate VEX.

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: อื่น ๆ
  • ต้องใส่ค่าเหล่านี้: SECOBSERVE_BASE_URL, SECOBSERVE_API_TOKEN

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

  • ผลตรวจเบื้องต้น: ผ่าน 1 จาก 1 ข้อ
  • รันในเครื่องคุณด้วยสิทธิ์ของผู้ใช้คุณ (ไฟล์ อินเทอร์เน็ต แอปต่าง ๆ)
  • ค่าที่คุณต้องใส่เอง: SECOBSERVE_BASE_URL, SECOBSERVE_API_TOKEN, SECOBSERVE_READ_ONLY, SECOBSERVE_ALLOW_DELETE

ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต

ต้องเตรียมก่อน

  • PyPIติดตั้ง uv ของ Python (มีคำสั่ง uvx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "secobserve": {
      "command": "uvx",
      "args": [
        "secobserve-mcp"
      ],
      "env": {
        "SECOBSERVE_BASE_URL": "ใส่ค่าของคุณ",
        "SECOBSERVE_API_TOKEN": "ใส่ค่าของคุณ",
        "SECOBSERVE_READ_ONLY": "ใส่ค่าของคุณ",
        "SECOBSERVE_ALLOW_DELETE": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add secobserve --env SECOBSERVE_BASE_URL='ใส่ค่าของคุณ' --env SECOBSERVE_API_TOKEN='ใส่ค่าของคุณ' --env SECOBSERVE_READ_ONLY='ใส่ค่าของคุณ' --env SECOBSERVE_ALLOW_DELETE='ใส่ค่าของคุณ' -- uvx secobserve-mcp

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "secobserve": {
      "command": "uvx",
      "args": [
        "secobserve-mcp"
      ],
      "env": {
        "SECOBSERVE_BASE_URL": "ใส่ค่าของคุณ",
        "SECOBSERVE_API_TOKEN": "ใส่ค่าของคุณ",
        "SECOBSERVE_READ_ONLY": "ใส่ค่าของคุณ",
        "SECOBSERVE_ALLOW_DELETE": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "secobserve": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "secobserve-mcp"
      ],
      "env": {
        "SECOBSERVE_BASE_URL": "ใส่ค่าของคุณ",
        "SECOBSERVE_API_TOKEN": "ใส่ค่าของคุณ",
        "SECOBSERVE_READ_ONLY": "ใส่ค่าของคุณ",
        "SECOBSERVE_ALLOW_DELETE": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • SECOBSERVE_BASE_URL จำเป็น env
    SecObserve base URL without /api, e.g. https://secobserve.example.com
  • SECOBSERVE_API_TOKEN ความลับ จำเป็น env
    SecObserve user or product API token
  • SECOBSERVE_READ_ONLY env
    Set to true to refuse every write operation
  • SECOBSERVE_ALLOW_DELETE env
    Set to true to enable the delete tool; deletion cascades and is irreversible

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 10 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub nh4ttruong ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด อื่น ๆi

  • ดาวมากกว่า 0% ของอีก 19023 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 47% ของอีก 19023 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 19023 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Secobserve MCP ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: SECOBSERVE_BASE_URL, SECOBSERVE_API_TOKEN

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.0) เข้า registry 2 เดือนที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv), Docker ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, KEVAREMESH Agent Discovery MCP

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

โดย formulahendryเริ่มต้น↓ 66/สัปดาห์★ 440อัปเดต 14 เดือนที่ผ่านมา

รันบนเครื่อง

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

โดย desktop-commanderกำลังโต★ 211อัปเดต วันนี้

รันบนคลาวด์✓ desktopcommander.app

KEVAREMESH Agent Discovery MCP

Discover 25 owned APIs and 11 rights-scoped external operations via 15 MCP tools and x402.

โดย cirralink-stackยังใหม่มากอัปเดต วันนี้

รันบนคลาวด์

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

secobserve-mcp

*MCP server for SecObserve — Triage, import and administration from an agent*

Tools • Install • Configure • Register with a client • Design

secobserve-mcp exposes the SecObserve REST API to an LLM agent over the Model Context Protocol: browse and triage observations, manage products, branches and rules, import scan reports and SBOMs, run scans and background jobs, generate VEX documents. Transport is stdio by default. Listed in the official MCP Registry as io.github.nh4ttruong/secobserve-mcp.

Tools

18 tools, not one per endpoint. SecObserve has ~50 REST resources and ~40 named actions; registering a tool for each would cost more context than the data ever returns, so the API is modelled as data and the tools are the interface to it.

ToolPurpose
secobserve_list_resourcesThe catalogue: every resource, its verbs, its actions. Makes no API call, so it is free to call first.
secobserve_describe_resourceExact filters, fields and enums, read from the running instance's OpenAPI schema.
secobserve_list / _getRead, with filters, sorting, pagination and projection.
secobserve_create / _update / _deleteCRUD over any resource in the catalogue.
secobserve_call_actionThe long tail: apply_rules, copy, simulate, license_overview, exports.
secobserve_assess_observationTriage one finding. Writes an observation log, honours the approval workflow.
secobserve_bulk_assess_observationsThe same assessment across up to 250 findings.
secobserve_approve_observation_logApprove or reject pending assessments (four-eyes).
secobserve_product_metricsPre-aggregated counts: current, timeline, the delta between two dates, and how stale they are.
secobserve_upload_fileImport a scan report, SBOM or VEX document from disk.
secobserve_api_importPull findings through a stored API configuration. Blocks; a timeout reports the work as still running and where to watch it land.
secobserve_trigger_scanRun SecObserve's built-in OSV or VulnerableCode scan. Same blocking behaviour.
secobserve_run_periodic_taskTrigger a background job, or list the registered ones.
secobserve_statusVersion, health, public settings, queue statistics, PURL types.
secobserve_vex_documentGenerate or revise a CSAF / OpenVEX / CycloneDX document.

Prompts

Six prompts, for the work that is a sequence of calls rather than one. A prompt is fetched by name when someone picks it, so it costs nothing per session — unlike a tool schema, which is sent on every connection.

PromptPurpose
triage-productWork one product's open findings, highest severity and fix_available first, assessing each with evidence.
daily-changesWhat changed since local midnight: new, parser-changed, resolved, human-assessed.
weekly-changesThe same feed over the past 7 days, broken down by day.
daily-reportToday's counts per product, what moved today, what is still open.
weekly-reportThe same three parts over the past 7 days, for the report someone sends on.
monthly-reportA month's closing numbers and the month-over-month delta.

Each one carries the caveats that decide whether the report is right: metrics cover the default branch only and answer 200 with every count at zero when the job has not run, no filter expresses a calendar month, and nothing in SecObserve is a due date or an SLA.

Install

uvx secobserve-mcp --help

uvx downloads and runs it without installing anything permanently. In VS Code: one-click install.

To put it on your PATH instead:

uv tool install secobserve-mcp

Once you have done that, uv tool owns the name: a bare uvx secobserve-mcp runs that pinned copy forever and never notices a newer release, so keep it current with uv tool upgrade secobserve-mcp. The client configurations below therefore say uvx secobserve-mcp@latest, which revalidates against PyPI on each launch — once per client session, not once per command. --check deliberately stays on the bare name, because its job is to report on the copy your clients are actually running.

From a checkout, for development:

uv venv && uv pip install -e ".[dev]"

Configure

VariableDefaultNotes
SECOBSERVE_BASE_URLhttp://localhost:8000Base URL without /api.
SECOBSERVE_API_TOKEN—User or product API token. Recommended.
SECOBSERVE_JWT—Alternative to an API token.
SECOBSERVE_TIMEOUT60Seconds. SecObserve imports and scans inside the request, and a timeout does not cancel one; raise it to get the counts back from the call itself.
SECOBSERVE_VERIFY_SSLtrueSet false only for a self-signed dev certificate.
SECOBSERVE_READ_ONLYfalsetrue refuses every non-GET call.
SECOBSERVE_ALLOW_DELETEfalsesecobserve_delete is off until this is set.
SECOBSERVE_IMPORT_DIRworking directoryUploads may only be read from this tree.
SECOBSERVE_EXPORT_DIR./secobserve-exportsExports and VEX documents are written here.
SECOBSERVE_AUDIT_LOGtrueOne JSON line per tool call on stderr. false switches it off.

Create a user API token:

curl -X POST "$SECOBSERVE_BASE_URL/api/authentication/create_user_api_token/" \

-H "Content-Type: application/json" \ -d '{"username": "you", "password": "...", "name": "mcp"}'

Check the wiring before handing it to a client:

uvx secobserve-mcp --check

It prints the instance version, the authenticated user, whether read-only and delete are enabled, and how this install compares to the newest release on PyPI. That last part is the only place this server calls pypi.org, it needs one short-lived request, and it degrades to a single line when the index is unreachable.

Run as a container

docker run --rm -p 8931:8931 \

-e SECOBSERVE_BASE_URL=https://secobserve.example.com \ -e SECOBSERVE_API_TOKEN=... \ ghcr.io/nh4ttruong/secobserve-mcp \ --transport http --host 0.0.0.0 --shared-identity

The image is built for linux/amd64 and linux/arm64, runs as a non-root user, and answers GET /healthz with its version. /healthz is liveness only and never calls SecObserve, so a backend outage does not get this server restarted.

--shared-identity is required and not in the image's default command: the token is baked into the environment, so every caller of the port acts as that one SecObserve identity, and the server refuses to start over HTTP until someone says that is intended. It then refuses every write, because an assessment made under a shared token records the wrong actor in the observation log and in four-eyes approval. Arguments to docker run replace CMD rather than extend it, which is why the transport flags are repeated above.

Keep it behind a gateway that authenticates the caller, and off any public port. For a single user, uvx over stdio is the better fit: one process, one token, writes included.

Register with a client

The server prints its own registration snippet, so none of the blocks below have to be copied by hand:

uvx secobserve-mcp --print-config claude   # or: codex, vscode, json

It reads SECOBSERVE_BASE_URL from the environment and always leaves the token as a placeholder — the snippet is meant to be pasted somewhere, and a token should not travel with it. The hint goes to stderr, so --print-config json > mcp.json writes a clean file.

Claude Code
claude mcp add secobserve --env SECOBSERVE_BASE_URL=http://localhost:8000 --env SECOBSERVE_API_TOKEN=... -- uvx secobserve-mcp@latest
Codex CLI

In ~/.codex/config.toml:

[mcp_servers.secobserve]

command = "uvx" args = ["secobserve-mcp@latest"] env = { SECOBSERVE_BASE_URL = "http://localhost:8000", SECOBSERVE_API_TOKEN = "..." }

Other MCP clients

Most clients take the same JSON shape:

{

"mcpServers": { "secobserve": { "command": "uvx", "args": ["secobserve-mcp@latest"], "env": { "SECOBSERVE_BASE_URL": "http://localhost:8000", "SECOBSERVE_API_TOKEN": "..." } } } }

For a shared deployment, run streamable HTTP with stateless JSON behind a gateway that authenticates the caller:

uvx secobserve-mcp --transport http --host 127.0.0.1 --port 8931 --shared-identity

--shared-identity is what makes this start: the transport has no authentication of its own, so every caller acts as the one identity in SECOBSERVE_API_TOKEN, and the flag accepts that and forces read-only for the process.

Design

Three decisions worth knowing before reading the code:

Responses are projected. SecObserve's serializers return every model column; an Observation has around 100. Each resource carries a default field set, and every list result says what it dropped. Pass fields=["*"] to opt out.

Resource help comes from the instance, not from this repo. secobserve_describe_resource reads /api/oa3/schema/ on the running backend, so filter names and enums cannot drift from the deployed version. The same schema is used to reject unknown filter names before a request is sent: django-filter silently ignores parameters it does not recognise, so filters={"vulnerability_id": "CVE-2021-44228"} would otherwise return the *entire* unfiltered list and the agent would report a confident wrong answer. It now fails with the list of filters that do exist.

Validation lives in the schema wherever a rule exists. An assessment with no comment, a rejection with no remark, a bulk call over 250 ids, or a create with neither product_id nor product_name is refused by the input model before any HTTP request. Everything else is passed through, and the API's 400 body — which names the offending field — is returned verbatim.

Expected failures come back as tool *text*, not as a raised exception: MCP reports a raised exception to the client as a bare Error executing tool , which would throw away exactly the guidance the agent needs to retry correctly.

Audit log

Every tool call writes one JSON line to stderr. SecObserve's own observation log records writes only, so without this a read — which is how data leaves — leaves no trace anywhere.

{"ts":"2026-09-20T19:01:06.474+00:00","tool":"secobserve_list","caller":"apitoken:82fd9d5b1ae9","claimed_username":null,"resource":"observations","outcome":"returned","ms":37.0}

{"ts":"2026-09-20T19:01:06.518+00:00","tool":"secobserve_list","caller":"jwt:09f002a0

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx