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.
1. Prove you can reach it
Section titled “1. Prove you can reach it”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”.
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.
2. List the tools
Section titled “2. List the tools”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.
3. Write a memory
Section titled “3. Write a memory”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.
4. Read it back
Section titled “4. Read it back”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.
5. Ask whether an action is safe
Section titled “5. Ask whether an action is safe”This is the verb with no equivalent in a retrieval system. Describe what the agent is about to do:
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.
Where to go next
Section titled “Where to go next”| Do this properly in a language | Go · Python · TypeScript |
| Understand what a verdict means | Advisory-first |
| Stop pasting a personal token into CI | Enrol a machine principal |
| See every field of every verb | MCP reference |