MCP serverMCP servertypeExposes tools to a coding agent over MCP.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

@odatano/nightgate-mcp

MCP server exposing NIGHTGATE, the Midnight blockchain attestation layer, as agent tools — the companion to the CAP indexer plugin of the same name.

Facts

Latestv0.16.0ReleasedLast pushLicenceApache-2.0

Where it sits

Lives in
Provides
Serve your application over MCPCAPServe your application over MCPcapabilityExposing selected application data and business operations to an AI agent through the Model Context Protocol. An application may also integrate remote services through [service integration](capability:service-integration), connecting its exposed contract with [agent access to your systems](capability:agent-systems-access). Development assistance belongs to [agent access to your code](capability:agent-code-access).
Flavors
Node.jsfrom its runtime
Requires
@odatano/nightgate@odatano/nightgateartifactNamed as a dependency in its documentation.

Who is behind it

ODATANOODATANOOrganisationMaintains this
In the atlas: maintains 4
@ODATANO
maintainerMaxPersonContributes to this
In the atlas: contributes to 4
@maxalexweber1
1 contributor

Before choosing this

Conditions

PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Serve your application over MCPAn MCP server exposes an SAP API, or uses SAP APIs to supply tools, resources or data to an agent.
  • § 1.1 Published APIs. Published APIs are made available for the documented purposes identified by SAP, including integration, extensions and data exchange.
  • § 1.2 Non-Published APIs. Customer and third-party applications must not access non-published APIs except where documentation permits it or SAP otherwise authorizes it.
  • § 2.2.2 AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.

MCP does not replace the API's documented-use boundary. Check that every endpoint is published for the intended use and whether the policy's AI-call or extraction provisions apply to the design.

SAP API Policy 4.2026a →
LicenceSAP Developer License Agreement 3.2 CAP§ 1, 3from Serve your application over MCPA covered CAP plugin or application exposes SAP product data or covered customer-application functionality through MCP.
  • § 1 License. Productive customer applications are limited to SAP BTP or another SAP-licensed platform, and mass extraction to a non-SAP product is restricted except where solely required for SAP interoperability.
  • § 3 Artificial Intelligence Training. The agreement prohibits use of the covered materials and customer applications for training artificial-intelligence models or systems.

The CAP developer agreement can apply alongside the API Policy. Ordinary agent inference is not automatically AI training; section 3 becomes relevant when covered materials or applications are used to train, develop or refine a model or system.

SAP Developer License Agreement 3.2 CAP →

What it declares

Every artifact

Type
MCP server
Origin
Independently maintained
Runtime
Node.js

For serve your application over MCP

Exposure source
Domain-specific backend
Exposed operations
Document anchoring, ZK claims, disclosure grants and live-state verification; the local-sponsored path requires builder and seed configuration
Execution path
Remote backend callsLocal transaction building

Connections2

@odatano/nightgate-mcp connections@odatano/nightgate-mcpPROVIDES→ provides1provides stated Exposes [@odatano/nightgate](artifact:odatano-nightgate) Midnight attestation, proof, disclosure and verification operations on [Node.js](external:nodejs) 20+, through a hosted gateway or direct NIGHTGATE instance. The local-sponsored path builds/proves with nightgate-tx and seed prerequisites, then uses a sponsor to pay and submit. Remote tools call the NIGHTGATE gateway or direct host; sponsored writes build and prove locally before submission through the sponsor. @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcp @odatano/nightgate-mcp — published npm README: https://www.npmjs.com/package/@odatano/nightgate-mcpServe your application over MCPNEEDS→ needs1needs authored@odatano/nightgate

Install

npm add @odatano/nightgate-mcp

Derived from the package name. No recipe recorded; the README has the configuration.

Where @odatano/nightgate-mcp runsBy its type: an MCP server is called by an MCP clientcallsdocumentedrequiresYour MCP client, actorYour MCP client@odatano/nightgate-mcp, module@odatano/nightgate-m…@odatano/nightgate, module@odatano/nightgate
SAPnot SAP's, or the project's ownstated in the documentdocumented only

README

quoted from ODATANO/NIGHTGATE-MCP under Apache-2.0, read
ODATANO/NIGHTGATE-MCP/README.mdOn GitHub

NIGHTGATE MCP

@odatano/nightgate-mcp

npm NIGHTGATE MCP License

MCP server for NIGHTGATE on Midnight. Anchors documents, proves zero-knowledge claims over hidden fields, grants and verifies disclosure against live contract state; swaps shielded tokens over an offer board and mints them on a token factory. Transactions are sponsored, the agent holds no NIGHT. The chain is read through the ODATANO API: no indexer, no node.

Quick start

Get an oda_… key at api.odatano.dev (Cardano wallet sign-in, a redeem code, or tADA over x402), then:

{
  "mcpServers": {
    "nightgate": {
      "command": "npx",
      "args": ["-y", "@odatano/nightgate-mcp"],
      "env": { "ODATANO_ACCESS_KEY": "oda_..." }
    }
  }
}

Claude Code: claude mcp add nightgate --env ODATANO_ACCESS_KEY=oda_... -- npx -y @odatano/nightgate-mcp

The hosted gateway is the default (Midnight preprod). The same key works for @odatano/core-mcp (Cardano). Node.js >= 20.

Tools

docs/tools.md lists every tool and the two flows: fee sponsoring (build and prove here, a sponsor pays) and shielded swaps (two halves, one sponsor). Errors carry the server's HTTP status and code.

Configuration

docs/configuration.md: every variable, an own NIGHTGATE instance, version requirements. Needs NIGHTGATE >= 0.36.0, which the hosted gateway runs.

Development

npm install && npm run integration

Live lanes:

NIGHTGATE_LIVE=1 NIGHTGATE_TEST_CONTRACT=<vault> NIGHTGATE_TEST_PAYLOAD_HASH=<64 hex> npm run integration
NIGHTGATE_SEED_HEX=<hex> NIGHTGATE_VAULT=<vault> npm run live:sponsor-unbound

License

Apache-2.0

Apache-2.0, read

History

Latest

v0.16.0

Changed 1

Notes

Needs NIGHTGATE 0.36.0 and @odatano/nightgate-tx 0.14.0.

Changed
  • The proof tools send typed parameters. siblings, dirs, setSiblings, setDirs, allowedValues, claims, schema, openingA, openingB, document and proofFields go to NIGHTGATE as arrays and objects; the *Json string parameters of NIGHTGATE 0.35 and below are not sent anymore. post_swap_offer sends tags as an array. Tool inputs are unchanged.
  1. v0.15.0

    Changed 1

    Notes

    Needs NIGHTGATE 0.35.0 and @odatano/nightgate-tx 0.14.0; analytics under /odata/v4/analytics (the gateway serves both names).

    Changed
    • The analytics URL defaults to <ODATANO_ACCESS_URL>/odata/v4/analytics instead of …/odata/v4/astra. An ASTRA instance that still serves /odata/v4/astra needs ODATANO_ANALYTICS_URL set to that path.
  2. v0.14.0

    Changed 1

    Notes

    Needs NIGHTGATE 0.35.0 and @odatano/nightgate-tx 0.14.0 (the gateway serves both spellings).

    Changed
    • The tools call NIGHTGATE under /odata/v4/midnight and /odata/v4/midnight-indexer. Against a server below 0.35.0 set NIGHTGATE_SERVICE_PATH=/api/v1/nightgate and NIGHTGATE_INDEXER_SERVICE_PATH=/api/v1/indexer.
  3. v0.13.0

    Features 1, Changed 1

    Notes

    Needs NIGHTGATE 0.34.0 and @odatano/nightgate-tx 0.12.2.

    Added
    • get_grant_usage: the key's jobs and its limits, the hour and day budgets and the rate classes with what is left.
    Changed
    • A 429 from NIGHTGATE carries retryAfterSeconds from Retry-After, as a gateway 429 did already.
  4. v0.12.0

    Changed 4

    Notes

    Needs NIGHTGATE 0.33.0 and @odatano/nightgate-tx 0.12.2.

    Changed
    • build_sponsorable_transaction and the local mint_token read contract state through the NIGHTGATE API (createTxBuilder({ api })); they dial no indexer and no node. NIGHTGATE_INDEXER_HTTP_URL and NIGHTGATE_INDEXER_WS_URL switch them back to a Midnight indexer.
    • The swap wallet syncs from NIGHTGATE_INDEXER_HTTP_URL and NIGHTGATE_INDEXER_WS_URL only; without them the swap tools refuse with the two names instead of dialing the public indexer.
    • build_sponsorable_transaction returns txId (sha256 of the bytes), characters and bytes instead of the base64; the bytes stay in the server process for one hour, outFile writes them to a path.
    • sponsor_unbound_transaction and sponsor_finalized_transaction take txId or file (base64 text or raw bytes); the base64 argument remains for callers without either. The result carries sent with characters, bytes and txId.
  5. v0.11.0

    Changed 3

    Notes

    Needs NIGHTGATE 0.32.0.

    Changed
    • sponsor_finalized_transaction, sponsor_unbound_transaction, sponsor_swap and mint_token take no sponsorSessionId: the server's sponsor pool pays, or the wallet session the agent grant is pinned to.
    • take_swap_offer: submit: true hands both halves to the sponsor at once; it replaces the sponsor session id as the trigger.
    • The platform pool id is gone from every tool description.
  6. v0.10.1

    Fixes 2

    Notes
    Fixed
    • A maker half posted with post_swap_offer is tied to its offerId; get_swap_wallet lists it with offerId and boardStatus and drops it once the offer is filled (read through get_swap_wallet, get_swap_offer, list_swap_offers, my_swap_offers). An expired or retired offer keeps its half for revert_swap_offer.
    • Board rows carry tags as the server sends them: an array from NIGHTGATE 0.30.3 on.
  7. v0.10.0

    Features 4, Changed 4

    Notes
    Added
    • Offer board (NIGHTGATE 0.30.0): post_swap_offer(offer, expiresAt?, tags?), list_swap_offers(givesType?, wantsType?, tag?, limit?), retire_swap_offer(offerId). sponsor_swap and take_swap_offer take an offerId from the board in place of the maker half: take_swap_offer reads the entry first and refuses before proving when it is closed or carries another offer; sponsor_swap pairs offerId with takerHalf or the halfId of a taken offer.
    • Board reads (NIGHTGATE 0.30.1): list_swap_offers(status?, since?) reads closed offers and the change feed, my_swap_offers(status?, since?, limit?) the caller's own posts, get_swap_offer(offerId) one offer open or closed, get_board_status() the board's counts and sponsor readiness without credentials (indexer service, NIGHTGATE_INDEXER_SERVICE_PATH, default /api/v1/indexer).
    • mint_token(contractAddress, name, amount, recipientCoinPublicKey?, recipientEncryptionPublicKey?, sponsorSessionId?, sessionId?, idempotencyKey?): a token of your own name on a token factory. Without sessionId the seed is the issuer, the mint is built, proven and signed here (@odatano/nightgate-tx 0.10.2 on @odatano/contract-token-factory) and sponsorUnboundTransaction pays; with sessionId the server session mints (mintFactoryToken, NIGHTGATE 0.30.1). The recipient defaults to this wallet; another wallet takes both of its keys. The type is in the response.
    • Disclosure to token holders: grant_disclosure_to_holders(payloadHash, tokenType, registryAddress, content?, contentType?, expiresAt?), revoke_holder_disclosure(holderGrantId), claim_disclosure(payloadHash, tokenType, claimSecret), holder_claim_key(claimSecret?).
    Changed
    • Peer dependency @odatano/nightgate-tx >=0.10.2 (holderClaimKey, tokenFactoryIssuerSecret); local building and swaps still run on 0.8.0. A missing or older install is reported per tool with the version it needs. Optional peer @odatano/contract-token-factory for local minting.
    • mint_token derives the default recipient from the seed without starting the local builder.
    • Amounts given as JS numbers must be safe integers; pass a decimal string for anything larger.
    • Function calls pass an unused declared parameter as null.
  8. v0.9.0

    Features 4, Changed 5

    Notes
    Added
    • Shielded swap tools (NIGHTGATE 0.29.0, @odatano/nightgate-tx 0.8.0):
      • get_swap_wallet: address, public keys, per token type balance, free coins and spendable; halves built here that have not landed.
      • read_swap_offer: gives, wants, inputs, outputs, bound of an offer file or base64 half, read from the transaction.
      • build_swap_offer(give, want, bind?): one proven half, as offer file (swapoffer1...).
      • take_swap_offer(offer, expect?, sponsorSessionId?, idempotencyKey?): the mirror half; with a sponsor session it submits both halves. A refusal carries halfId.
      • sponsor_swap(makerHalf, takerHalf | halfId, sponsorSessionId, idempotencyKey?).
      • revert_swap_offer(id): releases the coins of a half built here.
    • NIGHTGATE_SWAP_STATE_FILE, NIGHTGATE_SWAP_MAX_INPUTS.
    • get_attester_identity returns shieldedAddress, coinPublicKey, encryptionPublicKey.
    • npm run integration covers the swap tools (scripts/integration-swap.mjs).
    Changed
    • Peer dependency @odatano/nightgate-tx >=0.8.0 (was >=0.6.0).
    • Lockfile: one @midnight-ntwrk/ledger-v8 (8.1.0) in the tree. Two copies made the local builder fail with expected instance of DustParameters.
    • live:sponsor-unbound verifies with the attester id.
    • NIGHTGATE_SEED_HEX is 128 hex (a 64-byte BIP39 seed); 64 hex is refused at startup.
    • get_job_status describes the swap result of a swap job.
  9. v0.8.1

    Changed 2

    Notes
    Changed
    • get_job_status describes chainSegments (NIGHTGATE 0.28.0): for a confirmed batch, which calls applied. Tool errors carry the server's string code (INVALID_ARGUMENT, ...).
    • README reorganized; compatibility names the current version only.
  10. v0.8.0

    Features 1, Changed 1

    Notes
    Added
    • Analytics tools over ODATANO ASTRA (analytics_overview, analytics_key_figures, analytics_daily, analytics_top_block_producers, analytics_metrics, analytics_metric, analytics_series, analytics_compare, analytics_anomalies), registered when the host serves ASTRA at ODATANO_ANALYTICS_URL (default: the gateway's /odata/v4/astra). Same key, one unit per read, chain pinned to Midnight; analytics_compare puts Cardano next to it.
    Changed
    • Default gateway host is https://api.preprod.odatano.dev (one host per network; api.odatano.dev now only redirects there with a 307). Node drops the Authorization header on a cross-host redirect, so the old default would answer 401 for every call: set ODATANO_ACCESS_URL explicitly on older versions, or upgrade. The missing-key warning fires for any api.<network>.odatano.dev host.
  11. v0.7.0dated in the atlas

    Breaking 3

    Notes
    Changed (breaking)
    • One connection env for both ODATANO MCP servers. ODATANO_ACCESS_URL (default https://api.odatano.dev, the gateway), ODATANO_ACCESS_KEY (the oda_… key, or an ngat_… grant / other bearer against a direct instance) and ODATANO_ACCESS_USER / ODATANO_ACCESS_PASSWORD (basic auth for a direct instance) replace NIGHTGATE_BASE_URL, NIGHTGATE_TOKEN, NIGHTGATE_USERNAME and NIGHTGATE_PASSWORD; the old names are not read any more. @odatano/core-mcp 0.3.0 reads the same four, so an .mcp.json needs one key for both chains and no URL. The other NIGHTGATE_* variables (network, seed, indexer, zk-config, proof server, timeout, service path) are unchanged.
    • Gateway error bodies reach the agent. The ODATANO ACCESS gateway answers with { error: "<text>", ...detail }; the client now keeps the text as the message and hands the detail (unitsLeft, price, the topup hint, products, validUntil, retryAfterSeconds from Retry-After) through to the tool error, so a 402 says how to top up instead of "request failed with HTTP 402".
    • The hosted API is the documented default. README: quick start with a key from api.odatano.dev first, sponsoring through the gateway's platform pool, own instance second; the server warns at startup when the gateway is the target and no key is set. Server version constant follows the package.
  12. v0.6.1

    Changed 2

    Notes
    Changed
    • The ODATANO ACCESS key (oda_…) is the documented credential. api.nightgate.dev is the ODATANO ACCESS gateway since 2026-09-18: it meters the key in units, swaps in the NIGHTGATE agent grant underneath and fronts ODATANO with the same key. Set NIGHTGATE_BASE_URL=https://api.nightgate.dev and NIGHTGATE_TOKEN=oda_…; the key goes as a plain Authorization: Bearer. Get one at POST https://api.odatano.dev/keys (x402), from a giveaway code, or by signing in at the console. A raw ngat_… agent grant (x-agent-token) still works against a direct NIGHTGATE instance. No code change: the client already sent a prefix-less token as a bearer.
    • .env.example and README updated accordingly; this changelog added and shipped with the package.
  13. v0.6.0

    Breaking 3

    Notes
    Changed (breaking)
    • Vault lineage 4: every record is keyed by attester AND payload (NIGHTGATE >= 0.24.0). verify_attestation takes attesterId + payloadHash (or a bound documentId), verify_predicate takes attesterId, the prove_* tools accept an optional attesterId (the record the claim is proven against), anchor_document is one plain attest and returns attesterId.
    • prepare_anchor_commitment and commit_document_anchor are gone: nothing is left to guard, no identity can take over another attester's record.
    • Local building needs @odatano/nightgate-tx >= 0.6.0; the proof calls take recordKey or payloadHash (+ attesterId). Against a 0.23.x server the verify calls fail with 400 (unknown parameter).
  14. v0.5.1

    Features 2

    Notes
    Added
    • 32-slot vault. Schema and opening take 16 or 32 entries, allowedMask up to 32 bits, k up to 32; the vacuity guard is checked against the schema instead of a fixed all-ones constant. Target it with compiledArtifactRef: 'attestation-vault-32' (NIGHTGATE >= 0.19.0 for width 32). A 16-slot setup keeps working against any 0.18.x server.
    • Local ZK claims: field and document proofs can be built in-process.
  15. v0.5.0

    Features 2

    Notes
    Added
    • Parallel sponsoring channel: sponsor_unbound_transaction with the platform pool id (NIGHTGATE >= 0.18.0; 404 against older servers).
    • Local transaction building for agents: build_sponsorable_transaction and get_attester_identity via the optional @odatano/nightgate-tx

      = 0.2.0 txbuilder, driven by NIGHTGATE_SEED_HEX (never a tool argument).

  16. v0.3.0

    Features 1

    Notes
    Added
    • Cross-root document proofs and guarded anchoring (prepare_anchor_commitment / commit_document_anchor, removed again in 0.6.0).
  17. v0.2.0

    Features 1

    Notes
    Added
    • Membership and equality proof tools; README documents the tool set and the server compatibility table.
  18. v0.1.0

    Features 1

    Notes
    Added
    • Initial MCP server: attestation, verification and job tools over the NIGHTGATE OData API, agent-grant (ngat_…) or basic auth.
335downloads per week, npm
Weekly downloads for @odatano/nightgate-mcp26 complete calendar weeks from 2026-04-20 to 2026-10-18; the latest total is 335.20 Apr – 26 Apr: 027 Apr – 3 May: 04 May – 10 May: 011 May – 17 May: 018 May – 24 May: 025 May – 31 May: 01 Jun – 7 Jun: 08 Jun – 14 Jun: 015 Jun – 21 Jun: 022 Jun – 28 Jun: 029 Jun – 5 Jul: 06 Jul – 12 Jul: 013 Jul – 19 Jul: 020 Jul – 26 Jul: 027 Jul – 2 Aug: 03 Aug – 9 Aug: 8710 Aug – 16 Aug: 32317 Aug – 23 Aug: 50324 Aug – 30 Aug: 5131 Aug – 6 Sept: 237 Sept – 13 Sept: 2514 Sept – 20 Sept: 31921 Sept – 27 Sept: 41828 Sept – 4 Oct: 6455 Oct – 11 Oct: 5812 Oct – 18 Oct: 335
Serve your application over MCP
  1. API ManagementAPI proxies with security and traffic policies and Developer Hub
  2. com.sap.cds:cds-adapter-mcpMCP adapter turning a CAP Java service into an MCP server
  3. @cap-js/mcpExposes CAP services as MCP servers for AI agents
  4. @gavdi/cap-mcpGenerates an MCP server from annotated CDS entities and actions
  5. @neoimpulse/cap-js-mcpMCP server inside a CAP application with model and query tools
  6. @odatano/core-mcpMCP server exposing the ODATANO Cardano-to-OData bridge as tools
  7. @shahid.la/cds-db-nlquery-mcpMCP server answering plain-English questions against a CDS schema
  8. cap-mcp-pluginMCP server generated from a CDS model, forked from @gavdi/cap-mcp

Details

Sources4
npm registrydiscovered here, keywords:sap-capchecked
npm registry, @odatano/nightgate-mcpversion, releases, installschecked
github.com/git+https://github.com/ODATANO/NIGHTGATE-MCP.gittree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesnode
latestv0.16.0
first release
releases and cadence18, ~3d median
discovered vianpm registry · keywords:sap-cap
first seen in the atlas
ecosystem and domaincap, ai-and-agents
Contributors1

From the repository’s contributor list, .

History in the atlas4
  1. [{"key":"mcp_exposure_source","value":"NIGHTGATE Midnight attestation backend via hosted gateway or direct host"},{"key":"mcp_operations","value":"Document anchoring, ZK claims, disclosure grants and live-state verification; the local-sponsored path requires builder and seed configuration"},{"key":"mcp_execution_path","value":"NIGHTGATE gateway/direct-host calls; sponsored writes build/prove locally and submit through a sponsor"}]
  2. Domain-specific backend
  3. Remote backend calls; Local transaction building
  4. First seen.
For your agent
Ref
artifact:odatano-nightgate-mcp
JSON
/artifacts/odatano-nightgate-mcp.json
MCP
Connecting an agent