Skip to content

Quickstart

This uses curl so it works before you have picked an SDK, and so you can see exactly what goes over the wire. If you would rather start in a language, go to Go, Python or TypeScript — the same seven beats, in the same order.

You need VECTADYNE_MCP_URL, and from step 2 a VECTADYNE_TOKEN. See Getting access.

No token needed. This is the one call that works before a credential exists, which makes it the right first step: it separates “the network is wrong” from “the credential is wrong”.

Terminal window
curl -s "$VECTADYNE_MCP_URL" \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"server/discover"}'

You get back the protocol version and the verbs this deployment serves. There is no handshake — no initialize, no session to establish, no state to keep. Every request stands alone, which is why a curl one-liner is a complete client.

Terminal window
curl -s "$VECTADYNE_MCP_URL" \
-H 'content-type: application/json' \
-H "authorization: Bearer $VECTADYNE_TOKEN" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Seven verbs. Their full schemas are in the MCP reference, which is generated from this exact output — so the reference cannot describe a contract your server does not serve.

Terminal window
curl -s "$VECTADYNE_MCP_URL" \
-H 'content-type: application/json' \
-H "authorization: Bearer $VECTADYNE_TOKEN" \
-d '{
"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{
"name":"memory.remember",
"arguments":{
"content":"The nightly reconcile job fails when billing/reconcile.py is edited without regenerating fixtures.",
"kind":"lesson",
"scope_key":"repo:payments"
}
}
}'

Three things are happening that are worth naming:

  • kind: "lesson" types it. A lesson is not a policy and does not outrank one.
  • scope_key: "repo:payments" pins it. It will not surface for a different repository.
  • The write is idempotent by construction — identity is derived from the content, so sending this twice does not create two memories. See Handle errors for why that matters when a retry happens.
Terminal window
curl -s "$VECTADYNE_MCP_URL" \
-H 'content-type: application/json' \
-H "authorization: Bearer $VECTADYNE_TOKEN" \
-d '{
"jsonrpc":"2.0","id":4,"method":"tools/call",
"params":{
"name":"memory.search",
"arguments":{"query":"reconcile job failures","filters":{"scope_key":"repo:payments"}}
}
}'

Each hit carries its provenance and a score breakdown, not just text. An empty result is a real answer, not an error — results are admission-filtered at read time, so what you get back is what this credential is allowed to see.

This is the verb with no equivalent in a retrieval system. Describe what the agent is about to do:

Terminal window
curl -s "$VECTADYNE_MCP_URL" \
-H 'content-type: application/json' \
-H "authorization: Bearer $VECTADYNE_TOKEN" \
-d '{
"jsonrpc":"2.0","id":5,"method":"tools/call",
"params":{
"name":"preflight.action",
"arguments":{
"action":{
"action_type":"code.apply_patch",
"summary":"Rewrite the reconcile loop",
"changed_files":["billing/reconcile.py"],
"scope_key":"repo:payments"
}
}
}
}'

You get a verdict: allow, warn, block or require_approval, with reasons and citations.

The verdict does not stop your agent. It is advice, delivered in time to be useful. Your code decides what to do with it — and the polarity of that check is the single easiest thing to get backwards, so read Interpret a verdict before you write it.

Do this properly in a languageGo · Python · TypeScript
Understand what a verdict meansAdvisory-first
Stop pasting a personal token into CIEnrol a machine principal
See every field of every verbMCP reference