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

RTBlint

โดย aleksUIXรุ่น 0.14.4i★ –iรันบนคลาวด์
ชื่อใน registryio.github.aleksUIX/rtblint

ติดตั้ง

ภาพรวม

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

Validate OpenRTB bid requests and responses against IAB specs. ARTF, Rust core.

สามเสาของ PopNx MCP

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

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

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

  • การเชื่อมต่อ: รันบนคลาวด์
  • ช่องทาง (transport): Streamable HTTP
  • หมวด: อื่น ๆ

ติดตั้ง

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

ก่อนติดตั้ง

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

  • รันบนคลาวด์ไม่ต้องลงโปรแกรมเพิ่ม ต่อผ่านอินเทอร์เน็ตได้เลย

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

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

ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:

  1. เปิด Settings → Connectors
  2. กด Add custom connector
  3. วางที่อยู่ด้านล่างแล้วกด Add
  4. ถ้าให้ล็อกอิน ให้ล็อกอินกับผู้ทำ
SettingsConnectors1+ Add2https://…3
https://rtblint.org/mcp

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

claude mcp add --transport http rtblint https://rtblint.org/mcp

เปิดใน Cursor

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

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

{
  "mcpServers": {
    "rtblint": {
      "url": "https://rtblint.org/mcp"
    }
  }
}

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

เปิดใน VS Code

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

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

{
  "servers": {
    "rtblint": {
      "type": "http",
      "url": "https://rtblint.org/mcp"
    }
  }
}

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

ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:

  1. เปิด ChatGPT บนเว็บ → Settings → Connectors (Apps)
  2. กด Create หรือ Add (บางแพ็กเกจต้องเปิด Developer mode ใน Advanced ก่อน)
  3. วางที่อยู่ด้านล่าง ตั้งชื่อ แล้วบันทึก
  4. ถ้าให้ล็อกอิน ให้ล็อกอินกับผู้ทำ
SettingsConnectors1+ Create2https://…3
https://rtblint.org/mcp

ชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป

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

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

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

ยังไม่ได้อ่านรายการเครื่องมือของตัวนี้ เราตรวจ endpoint ทีละชุดวนไป

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

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

  • ✓ ผ่าน

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

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

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

    ยังมีคนดูแล

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

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

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

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

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

    endpoint ตอบ

    ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป

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

    ล็อกอินแบบ OAuth

    ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป

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

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

    ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint

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

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

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

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

RTBlint ปลอดภัยไหม?

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

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

registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก

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

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

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

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.14.4) เข้า registry 17 วันที่ผ่านมา

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

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา

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

ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, sync. labs

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

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

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

Spec Driven Development

โดย formulahendry

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

รันบนเครื่อง★ 440MITอัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

Remote Desktop Commander

โดย desktop-commander

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

รันบนคลาวด์★ 211อัปเดต เมื่อวาน
ติดตั้ง

sync. labs

โดย synchronicity-labs

Lipsync videos, dub them into other languages, make talking videos and open sync. Studio.

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

README จากผู้ทำ

เปิดอ่าน README

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

RTBlint

OpenRTB linter. Validates OpenRTB 2.x bid requests and bid responses against versioned IAB Tech Lab spec snapshots, from 2.0 through the monthly 2.6 releases (currently up to 2.6-202606).

Website and playground: rtblint.org

What it checks

  • Malformed JSON and wrong top-level shape
  • Required fields, including required non-empty arrays
  • Unknown objects and fields per version catalog (ext subtrees stay open)
  • Type mismatches (string, integer, float, boolean, object, and array forms)
  • Documented enum values, including AdCOM lists and vendor ranges (500+)
  • Deprecated, moved, removed, and not-yet-available fields across versions
  • Semantic rules: site/app/dooh exclusivity, imp media type presence, skippable video dependencies, duration exclusivity, seatbid/nbr presence on responses, and more
  • Response markup coherence: bid.adm content vs the declared bid.mtype (native JSON encoding, VAST/DAAST roots, double-encoded payloads)
  • Request/response cross-validation: with the originating request supplied, every bid's impid, mtype, adm markup, dealid, seat, and currency are checked against what the request actually offered
  • JSON dialect: spec JSON types flag fields such as imp.secure and regs.coppa as integers, while the IAB OpenRTB protobuf schema declares 28 of them bool. Either encoding is correct on its own transport and wrong on the other, so the caller declares which one it meant
  • Exchange profiles apply published request, response and paired constraints for the selected vendor and traffic direction. Optional extensions stay optional unless the source explicitly requires them. Profiles include Google Authorized Buyers, Prebid Server, Microsoft Monetize, Magnite DV+ xAPI and separate buyer, supplier and SDK contracts. See exchange profile evidence for sources, fixtures and limits
  • Nested specs OpenRTB carries as strings or opaque ext: Native Ads 1.2 markup (imp.native.request and native bid.adm, including required-asset pairing), GPP header vs gpp_sid and TCF 2 shape, ${AUCTION_*} macros on billing and loss URLs, EID/SUA structure, SKAdNetwork ext.skadn
  • Privacy signal contradictions: regs.coppa / device.lmt / device.dnt / regs.gdpr versus identifiers on the same payload, TCF Purpose 1 versus device-storage IDs, US Privacy Opt-Out Sale versus hashed EIDs, email-shaped user.id / site.page, DSA Transparency field presence. Findings describe the document. They do not state a legal conclusion.
  • ARTF envelopes and mutation sets, including applying the mutations and revalidating what comes out

Every finding carries a stable rule id, a severity, a message, and a JSON path.

ARTF

ARTF, the IAB Tech Lab Agentic Real Time Framework, hands an agent an OpenRTB payload inside an RTBRequest envelope and takes back *mutations*: proposed changes the orchestrator may accept or reject one at a time. Nothing in the framework checks that the auction still validates once they are applied, and a mutation is only meaningful relative to the request it targets.

# The envelope, plus full OpenRTB validation of what it carries

rtblint validate --type artf-request rtb-request.json

The mutation set against the auction it targets

rtblint validate --type artf-response --request rtb-request.json rtb-response.json

Apply the mutations, revalidate, and report only what the mutations broke

rtblint validate --type artf-response --apply --request rtb-request.json rtb-response.json

Three passes:

  • Envelope. Required members, lifecycle against the payloads actually carried, tmax plausibility for an in-auction call, originator and applicable_intents enum values, and the carried bid request and bid response validated as protobuf JSON.
  • Mutations. The response id echoes the extension point request id (not the bid request id), each declared intent is in applicable_intents, the operation and payload oneof member match the intent, and every semantic path (/imp/{id}, /imp/{id}/pmp/deals/{id}, /user/data/segment, /seatbid/{seat}/bid/{id}) resolves to something the auction carries. ADJUST_DEAL_MARGIN is reported as having no OpenRTB field to write to, because it does not.
  • Applied. The mutations are written in and the result revalidated, reporting the OpenRTB findings the mutations introduced with pre-existing findings filtered out. What the agent broke, not what arrived broken.

The ARTF v1.0 document and its .proto use different vocabularies for the same mutation (activateSegments and a value: {IDsPayload: ...} wrapper against ACTIVATE_SEGMENTS and top-level oneof members). Payloads written from the document are mapped and reported as artf.mutation.legacy_spec_encoding rather than dismissed as unknown.

Surfaces

SurfacePackageStatus
Rust CLIrtblintWorking
Rust libraryrtblint-coreWorking
MCP serverrtblint-mcpWorking
Node (WASM)rtblint-core on npmWorking
GitHub ActionaleksUIX/rtblintWorking
Pythonrtblint on PyPINot implemented yet
Gogithub.com/aleksUIX/rtblint/goNot implemented yet

OpenRTB 3.0 validates through its layered envelope: the transport objects (Openrtb, Request, Item, Deal, Source, Response, Seatbid, Bid) and the AdCOM 1.0 domain objects under item.spec (Placement), bid.media (Ad), and request.context. A 2.x payload sent to a 3.0 validator gets a migration diagnostic rather than a bare parse error. The 2.6-202204 snapshot has no extracted catalog and reports itself as unsupported instead of passing payloads silently. See ROADMAP.md for what's next and CHANGELOG.md for release history.

CLI

cargo install rtblint

rtblint validate request.json rtblint validate --type response response.json rtblint validate --type response --request request.json response.json rtblint validate --version 2.5 --format json request.json rtblint validate --dialect proto-json grpc-bid-request.json rtblint validate --profile google-ab google-bid-request.json rtblint validate --profile prebid-server pbs-auction.json rtblint validate --profile xandr xandr-bid-request.json rtblint validate --profile magnite magnite-bid-request.json rtblint validate --resolve --cache ./supply-cache request.json rtblint validate --summary bids.ndjson rtblint validate --batch --summary bids.ndjson cat request.json | rtblint validate --stdin

--request supplies the originating bid request for paired checks, including batch validation. --dialect proto-json selects the protobuf JSON encoding. --profile selects the vendor contract and traffic direction. Xandr checks bidder-facing Microsoft Monetize traffic; Magnite checks the DV+ xAPI extension model. Their optional seller, context and inventory identity fields are checked when supplied. Account-specific and runtime acceptance remain outside the payload. --resolve --cache checks SupplyChain hops against sellers.json and ads.txt / app-ads.txt from a local directory:

<dir>/sellers/<asi>/sellers.json

/ads/ /ads.txt /app-ads/ /app-ads.txt

Protobuf JSON also supports the IAB schema's native object alternatives: imp.native.request_native (requestNative) and bid.adm_native (admNative). Their native flags use booleans. The string alternatives request and adm keep their JSON-encoded Native Ads markup. Supply one alternative per oneof. Native assets remain validated and paired against required request assets. See the IAB protobuf schema.

Nothing is fetched; populate the cache yourself. --batch lints one JSON object per line from a file or stdin. --summary adds rule-frequency totals for a captured stream (--summary bids.ndjson for the histogram alone). See ARTF for --type artf-request and --type artf-response.

Exit codes: 0 valid, 1 validation errors, 2 usage or I/O error.

GitHub Action

The Action lives in this repo. Pin a release tag so CI downloads that CLI tarball:

- uses: aleksUIX/rtblint@v0.13.0

with: path: fixtures/bid-request.json spec-version: 2.6-202505

version selects the CLI release (auto follows the action's own v* tag). spec-version is the OpenRTB snapshot. Linux and macOS runners, x86_64 and aarch64.

Node

import { validate, validateResponse, validateResponseAgainstRequest } from "rtblint-core";

const report = validate(JSON.stringify(bidRequest), "2.6-202505"); if (!report.valid) { for (const issue of report.issues) { console.log([${issue.severity}] ${issue.path}: ${issue.message} (${issue.id})); } }

// Cross-validate a response against the request it answers. const paired = validateResponseAgainstRequest( JSON.stringify(bidResponse), JSON.stringify(bidRequest) );

For gRPC bidstream payloads and ARTF:

import {

validateDialect, validateProfile, validateArtfRequest, validateArtfResponseApplied, protoBoolDivergences, } from "rtblint-core";

validateDialect(JSON.stringify(bidRequest), "proto-json"); validateProfile(JSON.stringify(bidRequest), "google-ab"); validateProfile(JSON.stringify(bidRequest), "prebid-server"); validateArtfRequest(JSON.stringify(rtbRequest));

// { result, application }: what the mutations broke, and the payloads they produced const { result, application } = validateArtfResponseApplied( JSON.stringify(rtbResponse), JSON.stringify(rtbRequest) );

protoBoolDivergences(); // the 28 fields the two schemas type differently

MCP server

Hosted Streamable HTTP (no install): https://rtblint.org/mcp. Smithery listing: aleksander/rtblint (same account as vastlint). Payloads sent to the hosted endpoint may be stored (identifiers stripped) so the rules can be improved; see rtblint.org/privacy. Local rtblint-mcp over stdio does not send payloads.

rtblint-mcp also speaks MCP over stdio. Tools: validate_bid_request, validate_bid_response (optional bid_request for cross-validation), validate_artf_request, validate_artf_response (apply writes the mutations and revalidates), list_openrtb_versions, get_adcp_capabilities. Validation tools take optional dialect and profile arguments.

The ARTF tools are the guardrail an agent calls around its own work: check the envelope it was handed, then check the mutation set it is about to propose, before the orchestrator sees it.

{

"mcpServers": { "rtblint": { "url": "https://rtblint.org/mcp" } } }

Local stdio instead of the hosted endpoint:

{

"mcpServers": { "rtblint": { "command": "rtblint-mcp" } } }

Rust library

use rtblint_core::{validate_bid_request_for_version, OpenRtbVersion};

let result = validate_bid_request_for_version(OpenRtbVersion::V2_6_202505, payload); for issue in &result.issues { println!("{} {} {:?}", issue.severity, issue.id, issue.path); }

validate_bid_request_with_profile applies an exchange profile (`Profile::GoogleAut

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

ถาม PopNx