← MCP servers · observer-protocol

Agentic Terminal Directory

CAUTIONgrade B · trust 87/100

Agent commerce directory for Lightning, BOLT12, L402, and USDT merchants. Merchants self-register and land self-attested; an Observer Protocol attestation tier records what has been checked on each.

Overview

From the repository's own README, as read at the audited commit.

# AT Directory**Where agents discover OP-verified merchants on the rails Bitcoin and Tether actually use.**AT Directory indexes merchants that sell products, services, APIs, or content and accept Lightning, BOLT12, L402, or USDT (any chain), with trust attestations issued through [Observer Protocol](https://observerprotocol.org). It is the verified, agent-callable layer on top of the fragmented agent-payment landscape. It is **not** in the payment path — agents discover here and pay merchants directly.- **MCP server** (primary product) — `@agenticterminal/mcp-server`, hosted at `mcp.agenticterminal.ai`.- **Web directory** — [agenticterminal.ai](https://agenticterminal.ai), same data rendered for humans.- **SKILL.md** — teaches an agent how to query and complete payment handoff.## StatusPre-v1, active build. Target: week of 2026-05-18 for a live Tether-meeting demo. v1 ships Tiers 1–2.## Use it from an agent```jsonc// Hosted (recommended, no install){ "mcpServers": { "at-directory": { "url": "https://mcp.agenticterminal.ai/mcp" } } }``````bashnpm install -g @agenticterminal/mcp-server   # local alternative```Six tools: `search_merchants`, `get_merchant`, `verify_payment_endpoint`, `list_categories`, `list_rails`, `whoami`. Reads are ungated — anonymous agents see all tiers and can transact with no setup. An Observer Protocol `DirectoryAccessCredential` raises rate limits and unlocks write access (reviews), but is not required to discover or transact. Full reference: [agenticterminal.ai/api-docs](https://agenticterminal.ai/api-docs).## Repo layout```data/merchants/         One JSON file per merchant (the source of truth).data/schema/            JSON Schema (Draft 2020-12) for merchant records.data/categories.json    Category taxonomy.data/rails.json         Supported rails + USDT chains.data/LOGO-AUDIT.md      Logo sourcing checklist.packages/core/          Types, schema-validated load, search/filter.packages/mcp-server/    stdio + hosted HTTP MCP server, rail verific

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 skill --env AT_CREDENTIAL=${AT_CREDENTIAL} --env AT_MERCHANT_DID_SERVICE_KEY=${AT_MERCHANT_DID_SERVICE_KEY} --env AT_MERCHANT_VC_SIGNING_KEY=${AT_MERCHANT_VC_SIGNING_KEY} --env TURNSTILE_SECRET_KEY=${TURNSTILE_SECRET_KEY} -- npx -y @at-directory/[email protected]
claude-desktop
{
  "mcpServers": {
    "skill": {
      "command": "npx",
      "args": [
        "-y",
        "@at-directory/[email protected]"
      ],
      "env": {
        "AT_CREDENTIAL": "${AT_CREDENTIAL}",
        "AT_MERCHANT_DID_SERVICE_KEY": "${AT_MERCHANT_DID_SERVICE_KEY}",
        "AT_MERCHANT_VC_SIGNING_KEY": "${AT_MERCHANT_VC_SIGNING_KEY}",
        "TURNSTILE_SECRET_KEY": "${TURNSTILE_SECRET_KEY}"
      }
    }
  }
}

Exposed tools (7) 6 read · 1 write · 0 destructive

ToolRiskDescription
Betareadsells eSIMs
get_merchantreadGet the full record for one merchant including all rails, payment endpoints, and OP attestation. Tier 2+ requires an AT credential.
list_categoriesreadList the category taxonomy with merchant counts.
list_railsreadList supported payment rails and their current merchant counts.
search_merchantsreadSearch OP-verified merchants by rail, chain, category, agent-callable tier, trust tier, and free text. Ranked by trust tier then verification recency.
verify_payment_endpointwriteRun a live check against a merchant
whoamireadReport the resolved credential state and rate limits for the calling agent.

Details

Source
observer-protocol/at-directory
npm
@at-directory/skill@0.0.0
Transports
stdio · streamable-http
Credentials it reads
AT_CREDENTIALAT_MERCHANT_DID_SERVICE_KEYAT_MERCHANT_VC_SIGNING_KEYTURNSTILE_SECRET_KEY
License
MIT
Stars
0 · pushed 0d ago

Trust audit

Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

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

Findings (20)

MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
deploy/mcp-server/Dockerfile:25
CMD node -e "fetch('http://127.0.0.1:'+(process.env.PORT||8099)+'/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/mcp-server/src/dev/mock-verifier.ts:60
process.stderr.write(`[mock-verifier] listening on http://127.0.0.1:${PORT}\n`);
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierrc.json
.prettierrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/web/app/marketplace/page.tsx:2
import { allListings } from '../../lib/data';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/web/app/marketplace/page.tsx:8
} from '../../lib/display-policy';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/web/app/marketplace/page.tsx:9
import { MarketplaceBrowser } from '../../components/MarketplaceBrowser';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/crawl/lib/candidate.ts:16
import type { Merchant, RailName } from '../../../packages/core/src/types.ts';
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/mcp-server/src/verify/guarded-request.test.ts:28
['169.254.169.254', /link-local.*cloud metadata/],
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/mcp-server/src/verify/guarded-request.test.ts:38
['::ffff:169.254.169.254', /link-local/],
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/mcp-server/src/verify/guarded-request.test.ts:154
res.writeHead(302, { Location: 'https://169.254.169.254/latest/meta-data/' });
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/mcp-server/src/verify/guarded-request.test.ts:170
expect(res.headers.location).toBe('https://169.254.169.254/latest/meta-data/');
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:59
AT_VERIFIER_URL=http://127.0.0.1:8787 \
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
deploy/mcp-server/DEPLOY.md:127
service: http://100.86.223.47:8443
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/mcp-server/src/auth.test.ts:43
if (addr && typeof addr === 'object') url = `http://127.0.0.1:${addr.port}/verify`;
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
scripts/merchant-trust/signing.py:66
return Ed25519PrivateKey.from_private_bytes(bytes.fromhex(hex_str.strip()))
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
apps/web/package.json
next, react, react-dom, @types/node, @types/react, @types/react-dom, tsx, typescript
Why it matters. 8 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/node, prettier, tsx, typescript, vitest
Why it matters. 5 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/core/package.json
ajv, ajv-formats, @types/node, typescript, vitest
Why it matters. 5 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/mcp-server/package.json
@modelcontextprotocol/sdk, zod, @types/node, esbuild, typescript, vitest
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOInventory / provenance · inv.oversize · CWE-1104
apps/web/public/logos/maxi-0001.png
apps/web/public/logos/maxi-0001.png
Why it matters. 1190074 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-09-16 · audit v0.4.0 · source sha 383a38d4ea7c · full audit: observations/trust-audit/mcp-server/observer-protocol__directory.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-16383a38d4ea7cCAUTIONB87first audit

Also audited

Servers with a similar trust profile.

Questions

What is the Agentic Terminal Directory MCP server?

Agent commerce directory for Lightning, BOLT12, L402, and USDT merchants. Merchants self-register and land self-attested; an Observer Protocol attestation tier records what has been checked on each.

What tools does Agentic Terminal Directory expose?

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

Is Agentic Terminal Directory safe to connect to an agent?

With care. The audit graded it B (87/100) and found 20 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does Agentic Terminal Directory need?

It reads AT_CREDENTIAL, AT_MERCHANT_DID_SERVICE_KEY, AT_MERCHANT_VC_SIGNING_KEY and TURNSTILE_SECRET_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 Agentic Terminal Directory run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @at-directory/skill at 0.0.0.

How current is this page?

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

Provenance: OBSERVED · read 2026-09-16 · job trust-audit-2026-09-16