Refolk
StandardEngineering and open source

The MCP Server Admission Standard: Connect, Sandbox-Only, or Reject

Trace any MCP server from registry record to named maintainers, score its tools against its purpose, and record a verdict tied to a hash baseline.

22 min readLast reviewed November 12, 2026Read as Markdown

Key takeaways

  • In one practitioner's count of the official MCP registry, 498 of 15,235 GitHub-linked io.github records (3.3%) name a repository owned by a different account than the authenticated publisher, because repository.url is never checked against identity.
  • The first documented malicious MCP server, postmark-mcp, shipped 15 clean releases before version 1.0.16 added a hidden BCC. A publisher trace would have caught it, because Postmark never published an npm package of that name.
  • Hash the complete tool definition (name, title, description, inputSchema, outputSchema, and annotations), because a description-only pin lets a flipped readOnlyHint or destructiveHint through.
  • Tool-definition digests and package version pins catch different attacks: postmark-mcp changed behaviour inside the function body while its tool surface stayed the same, so an approval needs both.
  • Published scans put the share of vulnerable MCP servers anywhere from 7.2% to 66% depending on method, so reject thresholds have to be per-server criteria, not percentiles.
  • In Refolk's index, only 3 US profiles and 0 UK profiles put "MCP server Model Context Protocol" in their headline, and none add "security", so qualified reviewers have to be found under adjacent titles.

This standard is for the engineer or platform lead who has been asked to approve a third-party MCP server for the team's coding or ops agents. Every reviewer follows the same trace (registry record, then artifact, then repo, then named humans), scores tools against purpose the same way, and picks from the same three verdicts: Connect, Sandbox-Only, or Reject. Each approval is tied to a hashed tool-definition baseline, so any later change forces a re-review instead of going unnoticed.

What does this standard decide, and why is a tool server not an ordinary dependency?

The standard gives a third-party MCP server one of three verdicts: Connect, Sandbox-Only, or Reject. It exists because a tool server carries three risks that a one-time library approval was never built to handle.

An MCP server is a local process or remote endpoint that exposes tools an AI agent can call through the Model Context Protocol. A tool definition is what the server returns for each tool when the agent calls tools/list: the name, title, description, inputSchema, outputSchema, and annotations such as readOnlyHint and destructiveHint.

Three things make admitting a tool server different from adopting a dependency:

  • It runs with the agent's credentials. The server can reach every environment variable, file, and network destination the agent can reach. Its blast radius is the agent's, not the package's.
  • Its tool descriptions are prompt surface. The model reads every description and may act on it. Tool poisoning means hiding instructions to the model inside a tool definition. It needs no code exploit.
  • It can change after approval. A rug pull is a server that changes its tools or behaviour after it was approved. A remote server can do this without a new release. A local server does it by shipping a new version.
VerdictWhat it means in practice
ConnectInstalled with real credentials, pinned, digests recorded
Sandbox-OnlyRuns only with throwaway credentials and test data
RejectNot installed, and the reason is recorded

This standard covers admission only. Runtime monitoring belongs to a different control. The hash baseline at the end of the procedure is what connects the two.

What does the official MCP registry verify, and what does it not?

When a server is published, the official MCP registry checks two things: that the publisher controls the namespace, and that the package declares the server name it is published under. It does not inspect code, and it does not check that the listed repository belongs to the publisher.

Publishers prove namespace ownership with a GitHub, DNS, or HTTP challenge. An io.github.* namespace proves control of a GitHub account. A domain namespace proves control of a domain. How the package proves it belongs to that name depends on the package type:

Package typeOwnership marker the registry checks
npmmcpName in package.json
PyPImcp-name: $SERVER_NAME in the README
NuGetThe same README string
Docker/OCIio.modelcontextprotocol.server.name annotation
MCPB bundlefileSha256 hash

Everything beyond those two checks is the reviewer's job. The registry's own documentation says it relies on the broader ecosystem to scan server code. The biggest gap is the repository field: repository.url is not verified against the authenticated identity, and the documentation calls it documentation, not proof. The registry API has also accepted entries whose repository is an empty object. Finally, mcp-publisher validate checks the schema only, not the ownership checks that publish runs. A record that validates tells you nothing about who owns it.

One practitioner pulled every record and counted how often the repository field disagrees with the publisher:

SegmentRecordsShare
All records24,615100%
io.github namespace16,85068.5% of all
io.github with a GitHub repo15,23590.4% of io.github
Repo owned by a different account4983.3% of 15,235
No repository field5,25821.4% of all
498
io.github registry records whose linked repo belongs to a different GitHub account than the publisher
That is 3.3% of the 15,235 GitHub-linked io.github records, from one practitioner's count rather than an official figure.

This table is a snapshot from one person's count, and the percentages are derived from that count. To check it yourself, pull the records from the registry API and compare the owner of each repository.url with the namespace login. Some mismatches have innocent explanations, such as forks or organisation transfers. That is why this standard requires the explanation in writing rather than an automatic reject.

The provenance trace, in order

  1. Registry namespace
    GitHub, DNS, or HTTP challenge proves control of an account or domain
  2. Artifact marker
    mcpName, mcp-name, OCI annotation, or fileSha256 shows the package claims the name
  3. Repo owner
    The GitHub API owner must match the namespace login and the package publisher
  4. Build attestation
    Names the repository and workflow that built the published artifact
  5. Named humans
    Maintainers or a company, checked against the vendor's own channels
Each link proves a different thing, and only the whole chain ties a running server to accountable people.

Who is behind the server: tracing named humans and the vendor

A server can only be admitted when the trace ends at named people or a company whose history you have actually read. If the server wraps a vendor's service, the trace must also end at that vendor's own channels, because an impostor's account history can look perfectly legitimate.

The first documented malicious MCP server shows why. postmark-mcp was an npm package named after the Postmark email service. Versions 1.0.0 through 1.0.15 were clean. Version 1.0.16 added a hidden BCC that copied outgoing mail to giftshop[.]club, and later versions up to 1.0.18 kept it. The package had 1,643 downloads, and public warnings appeared 8 days after the malicious release. Its publisher appeared to be a legitimate software engineer from Paris with an established GitHub profile.

A maintainer-history check would have passed that publisher, and reading the code of the first fifteen versions would have passed every one of them. The check that fails it is the vendor check. Postmark has stated it never published a postmark-mcp library on npm, and the real server lived in the ActiveCampaign/postmark-mcp repository.

Code review would have passed fifteen releases. Asking whether the vendor publishes it would have failed the first.

What to read in maintainer history

SignalWhat it provesHow it lies
Steady release cadenceSomeone maintains itClean history can come before a backdoor
Stable publisher accountNo handover risk yetSays nothing about intent
Vendor lists the serverThe vendor stands behind itAbsent for real community servers
Other packages by the same peopleTrack record to checkCopycats can borrow reputation
Named employer or companySomeone is accountableProfiles can be stale

Treat a change in who publishes as a hard signal. A new npm or PyPI publisher account, or a transfer of repo ownership, puts the server back into review no matter how long its history is.

The slow part of this step is getting from a GitHub login to a named person with an employer and a record you can check. Refolk does that lookup from a single plain-English question across GitHub, LinkedIn, and the open web. It returns the people along with the profiles and repo activity that connect them to the server.

Finding someone qualified to review

Do not expect to find this specialism by its label. In Refolk's index of professional profiles, the headline phrase "MCP server Model Context Protocol" matches very few people:

3
US profiles in Refolk's index with "MCP server Model Context Protocol" in the headline
The same phrase returned 0 profiles in the United Kingdom, and 0 in the United States once "security" was added.
QueryCountryCount
"MCP server Model Context Protocol"United States3
Same phraseUnited Kingdom0
Same phrase + "security"United States0

These counts show how few people describe themselves this way. They do not measure the size of the market, and a long-phrase headline match is very restrictive. The three US matches held the titles ".Net Solutions Architect" and "Senior Software Engineer", and one worked at Sandia National Laboratories. My reading is that the specialism has no settled label yet, so reviewers will turn up under adjacent titles. Search by activity rather than by title: people who have filed issues on the OWASP MCP material or worked on the registry's publisher validation. In Refolk, that is a single question about contributions, with no title guessing.

What are the verdict criteria for Connect, Sandbox-Only, or Reject?

Score the server on seven criteria. The verdict is the worst cell across all of them. Any single Reject cell rejects the server, and any Sandbox-Only cell caps it at Sandbox-Only.

CriterionConnectSandbox-OnlyReject
Identity chainAll three agree, or fork documentedMismatch explained in writingUnexplained mismatch
Vendor matchVendor lists it, or labelled unofficialUnofficial, thin maintainer historyUses vendor name, vendor disowns it
Build provenanceAttestation names traced repo, or none and pinned code scannedNone, not yet scannedAttestation names another repo
Capabilities vs purposeEvery one justifiedFlags contained by sandboxUnjustified secret reads or egress
Tool descriptionsDescribe the tool onlyn/aInstructions aimed at the model
Remote auth401 without token and with wrong-audience token, PRM servedNo auth, test data onlyAccepts wrong-audience token
PinningVersion or digest pinned, digests recordedSameCannot be pinned

Provenance against reach

Broad reachNarrow reach
Broad reach, weak provenance
Reject, because this is the copycat profile
Broad reach, strong provenance
Connect only with credentials scoped to the purpose
Narrow reach, weak provenance
Sandbox-Only until the trace closes
Narrow reach, strong provenance
Connect, pinned with digests recorded
Weak provenanceStrong provenance
The more the server can reach, the stronger its provenance must be before it touches real credentials.

Scoring capabilities against the stated purpose

Write the server's purpose in one sentence before you look at anything it requests. Then list three things and mark each item justified or flagged:

  • Environment variables. Does the purpose need this secret? A server that sends email needs the email provider's key. It does not need cloud keys, the SSH agent, or the full environment.
  • Filesystem access. Which paths does it read or write, and does the purpose require them?
  • Network egress. Which domains does it contact? Any domain outside the service it integrates with needs an explicit reason.

Then read every tool description as though it were a prompt, because to the model it is one. A description should say what the tool does. Text that tells the model what to do (read other files, call other tools, hide output) is tool poisoning, and it is a Reject.

This scoring has a limit. postmark-mcp's BCC lived inside the function body, and its tool surface never changed. Reading tool definitions does not replace scanning the pinned code. That is why the provenance row allows a server without an attestation to reach Connect only once its pinned code has been scanned.

Why there is no percentage threshold

The published scans disagree too much to set a threshold, and none of them measures the two behaviours this standard cares about most.

StudyServersHeadline rate
arXiv 2506.135381,8997.2% vulnerable; 3.6% credential exposure; 5.5% tool poisoning
AgentSeal1,80866% at least one finding
arXiv 2509.06572Not retrieved27.2% expose an exploitable tool
arXiv 2608.00150414 audited41.6% churn in 3 days

Each study uses a different method, so the rates cannot be compared directly. No published scan isolates how many servers read broad secrets or send data to domains outside the service they integrate with. That is why the criteria above are written per server, not as percentiles. Popularity does not stand in for safety either: CVE-2025-6514 (CVSS 9.6) in mcp-remote affected a package with more than 437,000 downloads.

Where the OWASP MCP Top 10 fits

The OWASP MCP Top 10 is still a draft. Its project page puts it in a beta and pilot-testing phase, and its repository marks the document v0.1. Check the project page for the current status before you cite it in policy. The mapping below is my own derivation, not OWASP's:

OWASP itemWhere this standard checks it
MCP01 secret exposure, MCP02 scope creepStep 6 capabilities
MCP03 tool poisoningStep 6 descriptions, step 8 digests
MCP04 supply chainSteps 2 to 5
MCP05 command injectionStep 6, with a code scan
MCP07 authenticationStep 7
MCP09 shadow serversThe allowlist

MCP06, MCP08, and MCP10 mostly show up at runtime, so they fall outside admission.

The admission procedure, step by step

Run the eight steps in order and write each result into the decision record as you go. If a step fails, keep going anyway. The record is more useful when the reviewer can see every cell, not just the first failure.

Admitting one MCP server

  1. Pull the registry record
    Fetch server.json from the official MCP registry API. Done when the namespace, packages[] or remotes entries, and repository.url are in the record.
  2. Trace the namespace to the artifact marker
    Confirm that mcpName, the README mcp-name string, the OCI annotation, or the MCPB fileSha256 matches the server name. Done when the artifact's own publisher account sits next to the namespace.
  3. Trace the artifact to the repo owner
    Get the repository.url owner from the GitHub API and compare it with the namespace login and the npm or PyPI publisher. Done when all three agree, or the mismatch is explained in writing.
  4. Verify build provenance
    Run npm audit signatures or pypi-attestations verify pypi --repository, then check which repo and workflow identity signed the build. Done when the attestation names the traced repo, or the record says no attestation.
  5. Review maintainer and vendor history
    Read release cadence, changes in who publishes, other packages, and whether the vendor's own channels list the server. Done when named humans or a company are recorded.
  6. Score tool definitions against the stated purpose
    List tools/list plus every environment variable, filesystem path, and egress domain, and compare each with the one-sentence purpose. Done when every capability is justified or flagged and every description has been read for model-directed instructions.
  7. Check authorization on remote servers
    Send a request with no credentials, then one with a token issued for a different resource, and check for Protected Resource Metadata. Done when both responses and the domain owner are recorded.
  8. Record the verdict and hash baseline
    Record the verdict, the pinned version or image digest, one SHA-256 per canonicalized tool definition, and one over the whole tools/list. Done when a changed digest blocks the tool until re-review.

Provenance tools check less than their names suggest

On npm, packages published through trusted publishing get provenance attestations automatically. But npm install never verifies attestations, and npm audit signatures checks the certificate chain and digest without checking who signed. So read the attested repository yourself and compare it with step 3. On PyPI, pypi-attestations verify pypi --repository checks whether that repository's Trusted Publisher signed the package. There is no public figure for how many MCP server packages carry attestations, so a missing attestation is not proof of anything bad. It just sends the server down the code-scan path.

Remote servers: what you can and cannot establish

The specification says servers must check that access tokens were issued for them specifically as the audience, and it forbids token passthrough. Newer revisions of the authorization spec make OAuth 2.0 Protected Resource Metadata (RFC 9728) mandatory, so check which revision the server declares. Authorization as a whole is still optional, which means a server can legally be reachable with no authentication at all.

What you cannot establish from public sources is who actually operates an endpoint, or how revocation works. No documented procedure for either exists. There are partial signals: a domain namespace passed a DNS or HTTP challenge, and the registry ties a remote URL to exactly one server name. Record those, and record that operator identity is unconfirmed.

MCP server admission record
SERVER (registry name):
NAMESPACE + challenge type (GitHub / DNS / HTTP):
PACKAGES (type, name, pinned version or image digest):
REMOTE ENDPOINTS (if any):
repository.url:
OWNERSHIP MARKER FOUND (mcpName / mcp-name / OCI annotation / fileSha256):
ARTIFACT PUBLISHER ACCOUNT:
REPO OWNER (from GitHub API):
IDENTITY CHAIN: AGREES / MISMATCH EXPLAINED / MISMATCH UNEXPLAINED
  Explanation:
VENDOR CHECK: listed by vendor / labelled unofficial / vendor disowns / not applicable
PROVENANCE: attestation names ____ / no attestation / names other repo
  Signing workflow identity:
  Code scan of pinned version (if no attestation): done by ____ / not done
NAMED HUMANS OR COMPANY:
  History notes (cadence, publisher changes, other packages):
PURPOSE (one sentence):
CAPABILITIES (item | justified or FLAG):
  env:
  filesystem:
  egress:
MODEL-DIRECTED TEXT IN DESCRIPTIONS: none / found (quote it)
REMOTE AUTH: no-token -> ___ | wrong-audience token -> ___ | PRM served Y/N
  Operator identity: confirmed / unconfirmed
DIGESTS (SHA-256 over canonicalized complete definition):
  <tool name>: <digest>
  whole tools/list: <digest>
VERDICT: CONNECT / SANDBOX-ONLY / REJECT
CRITERION THAT SET IT:
REVIEWERS (two):
RE-REVIEW TRIGGERS: any digest change, any new release, publisher or repo owner change, endpoint change or disappearance

Fill one per server and version. Keep it next to the allowlist entry, and never overwrite it on re-review. Add a new dated record instead.

How the hash baseline triggers re-review

An approval is attached to a set of digests, not to a server name. Those digests are one SHA-256 per tool over its complete canonicalized definition, one over the whole tools/list, and the pinned package version or image digest. If any of them changes, the approval no longer covers what is running.

The OWASP MCP Security Cheat Sheet says to hash the complete tool definition, including inputSchema, outputSchema, and annotations, not only the description. A more detailed procedure was proposed in OWASP CheatSheetSeries issue #2756: canonicalize with the RFC 8785 JSON Canonicalization Scheme, then hash with SHA-256, keeping one digest per tool keyed by tool name plus one over the whole list, recorded at approval and re-checked every session. I have not confirmed whether the canonicalization detail made it into the published cheat sheet. I adopt it anyway, because without canonicalization the same definition can hash differently just from key order.

What each pin covers

  1. Registry record
    Namespace, publisher, and endpoint, re-checked when ownership changes
  2. Artifact pin
    Package version, image digest, or fileSha256, which catches code changes behind an unchanged surface
  3. Tool-definition digests
    Name, title, description, both schemas, and annotations, which catches poisoning and flipped hints
  4. Session check
    Re-hash tools/list at every session start, which catches remote changes with no release
Every layer catches a change the layers around it miss, so an approval needs all four.

Re-review is triggered by events, not by a calendar. Any of these sends the server back to step 1:

  • Any per-tool or whole-list digest changes.
  • A new package version is published, even if every tool digest still matches.
  • The publisher account or repo owner changes.
  • A remote endpoint changes domain, or disappears and comes back.
  • tools/list adds or removes a tool.

There is a real disagreement about where to put the effort. OWASP's guidance starts with verifying the source. Focused Labs argues for binding each approved tool to a capability manifest and diffing live tool definitions against it, which makes runtime diffing the primary control. This standard does both, on purpose. The provenance trace is what catches impersonation before anything runs, and the digest diff is what catches change after approval. Neither one would have stopped postmark-mcp on its own: the trace catches the copycat, and only the artifact pin catches a code change hidden behind an unchanged tool surface.

How admission goes wrong: failure modes and false positives

Most failed admissions do not come from skipping a check. They come from a check that passed and proved less than the reviewer assumed. Each failure below is paired with the check that closes it.

  1. The namespace check passes on a copycat. Looks like: a valid io.github namespace and a clean package. What it proves: only who controls the account. Check: the npm publisher, the repo owner, and the vendor's official channels must all agree. postmark-mcp fails here.
  2. repository.url is taken as proof. Looks like: the record links to a respectable repo. What it proves: nothing, because the field is only checked for shape, and 498 records point at a repo owned by someone else. Check: the GitHub API owner equals the namespace login, or a fork relationship is documented.
  3. A provenance attestation is treated as a safety verdict. Looks like: a green provenance badge. What it proves: where the package was built, not whether it is safe. Check: the attested repo matches step 3, and the code is still scanned.
  4. Only the description is hashed. Looks like: a working pin that never fires. What it misses: a changed readOnlyHint, destructiveHint, or outputSchema passes untouched, which makes it the cheapest rug pull available. Check: hash name, title, description, both schemas, and annotations after canonicalization.
  5. Definition pins are assumed to cover code. Looks like: digests match, so the reviewer moves on. What it misses: pinning tool definitions catches metadata changes, not hidden code changes. postmark-mcp's tool surface did not change at 1.0.16. Check: pin the package version or image digest as well.
  6. A clean release history is trusted. Looks like: months of uneventful versions. What it misses: postmark-mcp had 15 clean versions before the backdoor. Check: every new release goes back into review, and versions are never left floating.
  7. "Auth present" on a remote server is taken as enough. Looks like: the server returns 401 without a token. What it misses: some servers accept tokens minted for a different audience. Check: present a token issued for another resource and expect a 401.

False positives that should not trigger a Reject

  • Repo owner mismatch caused by a fork or organisation transfer. Record the relationship and move on. Only an unexplained mismatch is a Reject.
  • No attestation. Nobody has published how often MCP server packages carry attestations, so a missing one is not evidence of malice. It routes the server to a code scan.
  • A remote server that disappears. In one study, 41.6% of previously confirmed live servers were gone three days later. A vanished endpoint is churn until shown otherwise, but it still triggers re-review when it comes back.
  • A thin personal profile on a genuine community server. That caps the server at Sandbox-Only. It does not reject it, unless the server uses a vendor's name and the vendor disowns it.

Keeping the standard and the allowlist current

Keep an allowlist of admitted servers, each with its verdict, pins, and digests, and block everything else by default. A server not on the list is a shadow server, the risk OWASP's MCP09 names.

Three inputs to this standard change over time, so re-check them whenever you revise the policy, not on a fixed schedule:

  • Registry behaviour. Find out whether repository.url is now verified against identity, and re-pull the records to see whether the mismatch count has moved.
  • OWASP status. Check whether the MCP Top 10 has left draft and whether the cheat sheet now specifies canonicalization.
  • Authorization spec revision. Confirm which revision your remote servers declare, and whether it makes Protected Resource Metadata mandatory.

When a reviewer leaves, the allowlist must still make sense. That is the test of whether the decision records are complete. If someone new cannot reproduce the verdict from the record alone, the record is missing a cell.

Before marking a server admitted

  • The server.json namespace, packages or remotes, and repository.url are saved in the decision record.
  • The artifact's ownership marker matches the registry server name.
  • The namespace login, artifact publisher, and GitHub repo owner agree, or the mismatch is explained in writing.
  • If the server uses a vendor's name, that vendor's official channels were checked and the result recorded.
  • The provenance result names the signing repo and workflow identity, or says "no attestation" and records the code scan.
  • Named humans or a company are recorded, with notes on release cadence and publisher changes.
  • Every environment variable, filesystem path, and egress domain is marked justified or flagged.
  • Every tool description has been read, and none contains instructions aimed at the model.
  • For remote servers, both the no-token and wrong-audience requests returned 401, and PRM presence is recorded.
  • The package version or image digest is pinned, with no floating ranges.
  • Per-tool and whole-list SHA-256 digests over canonicalized complete definitions are recorded.
  • A changed digest or new release removes the tool from the agent until re-review.
  • The server is on the allowlist with its verdict, the criterion that set it, and two reviewer names.

Questions practitioners ask

How do I vet an MCP server before installing it?

Follow the chain from the registry record to the package's ownership marker, then to the GitHub repo owner, then to the named humans or company, and confirm all of them agree. After that, check build provenance, compare every tool and capability with the server's stated purpose, test authorization if the server is remote, and record a verdict next to the pinned version and per-tool SHA-256 digests. If any criterion fails, the verdict drops to the worse outcome.

Does the official MCP registry verify who published a server?

Only partly. The registry confirms namespace ownership through a GitHub, DNS, or HTTP challenge, and it confirms that the package declares the server name. It does not scan code, and it does not check repository.url against the publisher's identity. In one practitioner's count, 498 GitHub-linked records named a repo owned by a different account than the publisher, so reviewers need to compare the owner themselves.

Is npm provenance enough to trust an MCP server?

No. A provenance attestation shows where a package was built, not that the package is safe. npm install never verifies attestations, and npm audit signatures checks the certificate chain and digest but not the signer's identity. Look at which repository the attestation names, confirm it is the repo you traced, and still scan the pinned code.

How do I detect an MCP rug pull or tool poisoning after approval?

When you approve a server, canonicalize each complete tool definition and hash it with SHA-256. Store one digest per tool plus one over the whole tools/list, and re-check them at the start of every session. Pin the package version or image digest as well, because a code change behind an unchanged tool surface, which is what postmark-mcp did, never shows up in a definition hash.

What should an MCP server allowlist policy include?

For each server: the verdict, the pinned artifact version or digest, the per-tool and whole-list digests, two reviewer names, and the triggers that force re-review. Any server that is not on the list counts as a shadow server and is blocked by default. Any new release, digest change, publisher change, or endpoint change takes the server off the list until someone re-reviews it.

What should I check on a remote MCP server before connecting credentials?

Send a request with no credentials and expect a 401. Then present a token issued for a different resource and expect another 401, because servers must validate the token audience and must never pass tokens through. Confirm the server publishes OAuth Protected Resource Metadata and record who owns the domain. There is no public procedure yet for confirming who operates an endpoint.

Try it on the search you came here for

Stop building boolean strings. Just describe the person.

Type one sentence. I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web as it is right now, and hand back a ranked list with the reason next to every name.

  1. 01Describe them

    One plain sentence. Role, city, stack, stage, whatever matters to you.

  2. 02I read the web live

    GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.

  3. 03You read the shortlist

    Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.

  • No boolean, no filters, no seat to buy. One box.
  • Read at search time, so a profile updated yesterday counts today.
  • Every step visible as it runs, every name with its reason.

500 free credits on sign-up. No card, no demo call. See real searches.

Read next