Agent QA
Allows evaluation and grading of MCP servers for listing on the OKX.AI platform, with checks on connectivity, schema validity, error handling, latency, and description quality.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Agent QAevaluate the MCP server at https://example.com/mcp"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Agent QA
Agent QA is a private, portable memory for AI agents. Your notes are encrypted under your own passphrase, kept on Walrus, and recalled by any agent on any device. Install it once as an MCP server and your agent stops forgetting you.
One memory, every agent, owned by you.
Why it exists
Agents are stateless. A coding agent forgets the project between sessions. A trading agent forgets its own trades. A wallet agent forgets what it rescued last week. The memory products that do exist keep your context inside one vendor, readable by them, unreachable from any other agent.
Agent QA moves the memory to you. Every note is encrypted under a key derived from your passphrase before it reaches storage, the ciphertext lives on Walrus, and any agent you authorise recalls the same memory from anywhere. The operator cannot read your notes. A vendor cannot hold them hostage. A wrong passphrase decrypts nothing.
Memory is quality assurance for agents: an agent that remembers its decisions, its trades, and its mistakes is a better agent every session.
Related MCP server: mcp-server-reviewer
AGON provider agent
The memory service exposes a read-only AGON Playground challenge at
POST /agon/v1/challenge. It runs the real recall-ranking policy against a
bounded evidence set, quarantines instructions embedded inside recalled text,
and always reports writesPerformed: false. The challenge never accepts a
memory identity, passphrase, payment, or wallet action.
The paid memory service keeps its X Layer route at POST /x402/memory. An
independent AGON route is available at POST /x402/agon-memory; it settles only
on Arc Testnet through Circle Gateway and stays unavailable unless
AGON_X402_ENABLED=true and AGON_X402_PAY_TO are configured. Enabling the
provider route does not enable AGON's buyer or send a payment by itself.
What you get
Three tools, any agent.
rememberstores one note,recallbrings back what is relevant, andforgetretires a folder for good. Any MCP client carries them: Claude Code, Cursor, Codex, or a custom agent.Real receipts. A write reports stored only after Walrus confirms it, and returns the blob id it lives under. A failed write says so with the reason; it never pretends.
Folders. Memory is organised as you, then folders, then notes. One folder per project keeps recall scoped: the coding agent reads
project-x, the trading agent readsdex-trading, and the same person owns both.Honest recall. Results are pulled, decrypted transiently, ranked against the query, and returned. When a folder holds more than could be scanned, the reply says so instead of quietly dropping the rest.
The session ritual. The server instructs every connected agent: recall the project folder at session start, remember decisions the moment they happen, close with a handoff digest. Memory that is written reliably is memory that recalls reliably.
Wire your agent
The endpoint is https://agentsqa.xyz/mcp (or your own deployment). Identity and passphrase ride as HTTP headers set in the client configuration, never as tool arguments, so the secret never enters the model's context.
For Claude Code:
claude mcp add --transport http agent-memory https://agentsqa.xyz/mcp \
--header "X-Memory-User: you@example.com" \
--header "X-Memory-Passphrase: your-passphrase"For the friendliest path on a new device, run npx agent-memory-connect setup once: it stores a blind-typed passphrase in the OS credential store, then wires any agent with one line and no secrets in any config file (source in connector/).
Per-agent configuration, a hook that guarantees recall on session start, the builder pattern for giving a single-purpose agent memory, and the note conventions that recall well are all in docs/agent-setup.md.
The console
The site serves a memory console, the human door to the same memory your agents use. Enter your identity, passphrase, and folder, then remember and recall directly in the browser. A confirmed write shows its Walrus receipt.
HTTP API
Two routes do the work.
POST /remember
{
"user_key": "you@example.com",
"passphrase": "your-passphrase",
"content": "2026-07-14: bought 0.5 ETH at 3,842 USDC. Stop at 3,690.",
"folder": "dex-trading"
}The reply reports stored, and when the write is confirmed it carries receipt, the Walrus blob id.
POST /recall
{
"user_key": "you@example.com",
"passphrase": "your-passphrase",
"query": "past trades on ETH and how they went",
"folder": "dex-trading",
"limit": 8
}The reply carries records, the decrypted best matches, and truncated, true when the folder holds more than could be scanned.
POST /forget
{
"user_key": "you@example.com",
"passphrase": "your-passphrase",
"folder": "dex-trading"
}Forget retires a folder permanently: no recall returns its notes again, and the folder starts fresh for new writes. It is honoured only when the passphrase actually opens the folder, so an identity string alone cannot wipe anything. Walrus is immutable, so this is revocation rather than erasure: the old ciphertext stays sealed under your passphrase until its storage expires, and the service never serves it again.
GET /health returns a liveness check. GET / serves the console. /mcp is the MCP endpoint with the tools remember, recall, and forget.
Ownership, plainly
The passphrase is the only key. It is sent over HTTPS with each call, used transiently to encrypt or decrypt, and never stored.
Lose the passphrase and the memory stays sealed, permanently. A reset path for you would be a reading path for someone else.
Each confirmed write returns a Walrus blob id, so a note is not just stored but provable.
Forgetting is revocation, not erasure, because immutable storage offers nothing stronger, and we say so. Key destruction is the only true delete.
The service in front is stateless. Point your agents at the hosted endpoint or run your own from the published compose files; the memory model does not change.
Available Tools
5 toolsfetch_fileA
Retrieve one of the user's stored files, decrypted, by name.
Files live separately from notes. Call list_files first to find the name.
Returns the file's bytes as base64 in data_base64 along with its
name and content_type; to save it, decode the base64 and write the
bytes to disk (for example echo <data_base64> | base64 -d > <name>).
Very large files are not inlined; retrieve those from the web console or the
REST /file/download endpoint instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The exact file name to retrieve, as shown by list_files. | |
| folder | No | The folder the file is in. Leave empty for the default space. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that content is returned decrypted, that bytes arrive base64-encoded in data_base64, and that oversized files are silently unavailable through this path — a failure mode an agent must anticipate. It stops short of stating auth requirements or the error behavior when a name doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and prerequisite, then the return shape, then the size caveat. The shell one-liner for decoding is practical but slightly instructional padding; the definition is otherwise tight for the amount of genuinely useful information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema, this covers purpose, prerequisite, return format, and the large-file escape hatch — everything needed to call it correctly. The remaining gaps (folder scoping, not-found behavior) are minor since the schema and output schema cover the structured side.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both 'name' and 'folder' are already documented in the schema. The description reinforces that the name must match what list_files reported but adds nothing about the optional folder parameter, so it neither compensates nor detracts. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve one of the user's stored files, decrypted, by name') and explicitly separates the resource from a confusing sibling ('Files live separately from notes'). An agent can distinguish it from recall/remember without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Prescribes a prerequisite ('Call list_files first to find the name') and gives an explicit exclusion with an alternative ('Very large files are not inlined; retrieve those from the web console or the REST /file/download endpoint instead'). Both the when and the when-not are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetA
Forget a folder of the user's memory, permanently. Confirm with the user first.
After this, no recall will return the folder's notes again; the folder starts fresh and new notes work immediately. This is irreversible, so call it only when the user explicitly asks to forget or wipe a folder, never on your own judgement. The server verifies the configured passphrase actually opens the folder before honouring it, so an identity string alone cannot wipe anything. Honest semantics: the old encrypted notes stay on Walrus until their storage expires, sealed under the passphrase; they are simply never served again.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | The folder to forget: the project or task's folder name. Leave empty for the default space. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses irreversibility, a passphrase-verification prerequisite (an identity string alone cannot wipe), and the post-state ('no recall will return the folder's notes,' folder starts fresh). It even explains the underlying storage semantics — old encrypted notes persist on Walrus until expiry but are never served — which is unusually candid and prevents a misread of 'permanently'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the confirmation requirement before any nuance. Roughly 110 words is defensible for a destructive, auth-gated tool, though the closing 'Honest semantics' paragraph is slightly discursive and could be tightened without losing substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained. Given a destructive, irreversible operation with a passphrase guard, the description covers confirmation, authorization, irreversibility, and post-state — everything needed to call it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'folder' parameter's default-space behavior is documented in the schema itself, so the baseline is 3. The description adds no syntax, naming, or format guidance beyond what the schema already says about the folder argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb ('Forget') and resource ('a folder of the user's memory') and states the effect ('permanently'). It reads clearly against siblings remember/recall/list_files/fetch_file, which are non-destructive operations on the same memory store.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not-to-use: 'call it only when the user explicitly asks to forget or wipe a folder, never on your own judgement,' plus a required 'Confirm with the user first.' The gateway condition is stated unambiguously, which is exactly what an agent needs before invoking a destructive tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesA
List the files the user has stored in a folder (name and size).
Files are stored separately from notes, so recall never returns them.
Call this to see which files exist, then fetch_file to retrieve one.
Returns each file's name and size. An empty list means no files in
that folder yet; locked true means the passphrase does not open them.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | The folder to list files from: the project or task's folder name. Leave empty for the default space. Files are separate from notes, so recall does not find them; use this to see stored files. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that files live in a separate store from notes, that results are name/size pairs, that an empty list is a valid non-error outcome, and that 'locked' true means the passphrase doesn't unlock them. It stops short of covering errors, permissions, or pagination behavior for large folders.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the return shape, then the routing hint, then edge cases. Slight redundancy: the 'files are separate from notes' fact appears in the description and again in the folder schema, and 'Call this to see which files exist' re-states the opening sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, yet the description summarizes them anyway and adds the semantic edge cases (empty list, locked) that the schema cannot convey. For a single-parameter read tool, an agent has everything needed to call it and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already defines 'folder' with the default-space semantics, so the description adds essentially nothing new about the parameter beyond restating that files are separate from notes. Baseline 3 is appropriate where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('List the files the user has stored in a folder') and scopes the output ('name and size'). It also distinguishes itself from a sibling by stating that 'recall never returns them', which an agent cannot infer from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sequences the workflow: 'Call this to see which files exist, then fetch_file to retrieve one.' It also rules out the misleading alternative ('recall does not find them'), covering both when-to-use and when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallA
Recall what is relevant from the user's portable memory before you act.
Call this at the start of every session, scoped to the project's folder, so
you continue from where any previous session (on any machine, in any agent)
left off instead of starting from zero. Call it again whenever you need
context the user has given before, and before remembering a digest, so the
new note supersedes rather than duplicates. The user's identity and
passphrase come from your MCP client configuration, not from these
arguments, so it decrypts that user's own memory without the secret
entering the conversation. An empty list means nothing relevant is
remembered yet. When truncated is true the folder holds more than could
be scanned, so treat the answer as incomplete and say so.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What you want to remember, in natural language. | |
| folder | No | Folder to recall from: use the project or task's folder name, the same one notes were remembered under. Leave empty for the default space. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: identity and passphrase come from MCP client configuration rather than arguments, decryption happens without exposing the secret, an empty list means nothing relevant is remembered, and `truncated: true` means the scan is incomplete. These details materially affect how an agent should call and interpret the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary instruction to call at session start, then layers on re-use conditions, authentication context, and empty/truncated result semantics. Despite covering several behaviors, each sentence contributes useful operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not explain return structure in detail, yet it still explains the meaningful empty-list and truncation cases. Combined with authentication context and usage timing, it gives the agent everything needed to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so both `query` and `folder` are documented structurally. The description reinforces the folder scoping and default-space behavior, but it largely repeats what the schema already states rather than adding new parameter-level syntax or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: recall relevant information from the user's portable memory. It also distinguishes the tool from the sibling `remember` by explaining that recall should happen before remembering a digest so notes supersede rather than duplicate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit timing and scope: call at the start of every session, scoped to the project's folder, and again whenever prior user context is needed. It also names a concrete alternative workflow, calling it before remembering a digest to avoid duplication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberA
Store one thing in the user's private, portable memory on Walrus.
Call this the moment something is worth carrying into a future session: a decision, a preference, a fact about the project, or an action taken on the user's behalf. Before the session ends, store one handoff digest (what changed, the state things were left in, what comes next); recall first so the digest supersedes earlier notes instead of duplicating them. The user's identity and passphrase come from your MCP client configuration, not from these arguments, so the note is encrypted for that user without the secret entering the conversation, and the same person recalls it from any device or agent.
stored true means the note is durably saved and will be returned by
recall from now on, including from other devices. On false, read note
and tell the user instead of assuming it saved.
receipt starting with buffered: is normal and healthy, not a
fallback or a degraded mode. Every write lands in a durable write-ahead
buffer first and is batched onto Walrus a few hours later, because Walrus
charges per write regardless of size, so batching is what makes the service
affordable. Do not report a buffered receipt to the user as a failure or as
"saved locally only": the note is safe and already recallable everywhere.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | Folder to file this under: one folder per project or task, the same name every session. Leave empty for the default space. | |
| content | Yes | The note to remember. Write it so a stranger could act on it alone: start with today's date, name concrete things (files, commands, amounts, addresses), and state why, not just what. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that credentials come from MCP client config rather than arguments, that notes are encrypted per user and readable across devices, that writes land in a durable write-ahead buffer batched hours later, and that `stored: false` must be surfaced rather than assumed. It even pre-empts a likely misinterpretation by stating a `buffered:` receipt is healthy, not degraded — exactly the kind of behavioral context structured fields cannot supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and trigger conditions, and every paragraph maps to a real agent failure mode (duplicate digests, misreporting buffered writes as failures). It is on the long side, and the explanation of Walrus per-write pricing is justification rather than instruction, but nothing is genuinely wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter write tool with an output schema, the description covers the remaining gaps an agent would hit: what `stored` and `receipt` mean, what to do on failure, and where credentials come from. No return-value documentation is missing that the output schema doesn't already provide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description adds real meaning by clarifying that identity and passphrase are NOT parameters but come from client configuration, which prevents an agent from trying to supply them. It does not elaborate on `folder` organization beyond what the schema already states, keeping it just short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Store one thing in the user's private, portable memory on Walrus') and immediately constrains scope to one item per call. The contrast with 'recall' ('recall first so the digest supersedes earlier notes instead of duplicating them') lets an agent separate it from its closest sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggers — 'the moment something is worth carrying into a future session: a decision, a preference, a fact about the project, or an action taken on the user's behalf' — plus a session-end handoff-digest rule. It names the alternative ('recall first') and the ordering constraint, so when-to-use and when-to-prefer-recall are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
fetch_file - First observed
forget - First observed
list_files - First observed
recall - First observed
remember
TDQS
Scored across 5 tools
Each tool has a clearly distinct role: remember/recall/forget handle notes, while list_files/fetch_file handle stored files. The descriptions explicitly separate notes from files, reducing misselection risk.
All names are lowercase and readable, with file tools following a verb_noun pattern. The note tools are bare verbs (remember, recall, forget), a minor deviation from the compound naming used elsewhere.
Five tools is well-scoped for a memory-plus-file-retrieval server, with each tool covering a distinct operation. The set is neither thin nor bloated.
Note lifecycle is well covered with store, recall, and forget. The file surface only supports listing and fetching, with no obvious tool for storing, updating, or deleting files, leaving notable gaps for full file lifecycle management.
Maintenance
Related MCP Connectors
Grade MCP servers A to F with the open behavioral litmus. npm: full toolset; hosted: lookups only.
Scores any MCP server before you trust it: free quick check, full paid report, 2-5 way compare.
Independent A-F trust grade for any MCP server, watched for drift. Free, never for sale.
Scan any MCP server for tool-poisoning, security, auth & license. Trust score before install.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceSecurity auditor for MCP servers that enumerates tools, resources, and prompts, scans for injection patterns, classifies risk levels, and produces a scored report (0-100, grades A-F).31 PyPI2MIT
- AlicenseNot gradedqualityDmaintenanceReviews MCP servers for quality, security, and best practices, providing scores and improvement plans.MIT
- AlicenseAqualityBmaintenanceAgent-readiness scorecard for any MCP server: protocol checks, 0-100 score and actionable findings.1456 npm1MIT

MCP Queen Registryofficial
AlicenseAqualityCmaintenanceCrawls and grades MCP servers deterministically, providing a registry, leaderboard, and API to query server grades and submit feedback.71MIT