ProbeID: Verifying MCP Tool Identity for LLM Agents under Registry Drift
Organizations: City University of Hong Kong (Dongguan), Dongguan, China · The Hong Kong Polytechnic University, Hong Kong SAR, China · Zhengzhou University, Zhengzhou, China · Northwestern Polytechnical University, Xi’an, China
Abstract
Agents select tools by copyable descriptions, which cannot establish which implementation runs. ProbeID compares canonicalized responses to schema-valid probes with a trusted admission reference and abstains on ambiguity, so a squatter must copy probe-observable behavior. With the gold present, independent probes and a fixed margin, standard concentration arguments give a shared probe budget logarithmic in the candidate count and bound the joint probability of a wrong decision. On cached MCP-IdentityDrift cases, strict choice reaches hit@1 while description routers fall near chance, but simpler exact comparisons tie it, MMD better tolerates heavy value noise, and a 32B behavioral judge is similarly accurate at higher cost. Random probes from agent banks and a prospective held-out study of 38 tools test theory-set thresholds. On the agent banks, equality refuses every reachable replacement from 64 probes and the bounded distance from 512, and sharper post hoc gates halve both. Two tools whose drift no bank probe reaches always pass. In an MCP-Bench agent, verification cuts tainted tasks from 15 to 9 of 16 at unchanged task success. Over eleven weeks, 7 of 59 real tools changed responses despite version pins. Verification depends on reference integrity, probe coverage, and response noise.
Figures & tables
| evidence | probes | rule | decided | wrong |
|---|---|---|---|---|
| cached cases, gold present | fixed, | strict choice | 1.000 | 0.044 |
| cached cases, gold present | fixed, | per-case radius | 0.153 | 0.000 |
| banks, gold present, 8 reachable tools | random, | Algorithm 1 , equality | 0.784 | 0.000 |
| banks, gold absent, 8 reachable tools | random, | single gate, equality | 0.006 | 0.006 |
| banks, gold absent, 2 unreachable tools | random, any | single gate, either | 1.000 | 1.000 |
| banks, 77 golds and 67 unaffected tools | random, any | single gate, either | 1.000 | 0.000 |
Appendix figures & tables27 assets
Supplementary material from the paper’s appendix.
Appendix
| 1.000 / 0.000 | 1.000 / 0.000 | 1.000 / 0.000 | 1.000 / 0.000 | |
| 0.950 / 0.050 | 0.981 / 0.019 | 1.000 / 0.000 | 1.000 / 0.000 | |
| 0.700 / 0.300 | 0.956 / 0.044 | 1.000 / 0.000 | 1.000 / 0.000 | |
| 0.425 / 0.575 | 0.794 / 0.206 | 0.938 / 0.062 | 0.994 / 0.006 | |
| 0.163 / 0.838 | 0.362 / 0.637 | 0.619 / 0.381 | 0.844 / 0.156 | |
| 0.087 / 0.912 | 0.163 / 0.838 | 0.306 / 0.694 | 0.550 / 0.450 |
| attacker | hit@1 | abstain | misid | |
|---|---|---|---|---|
| blind | 1 | 0.86 | 0.14 | 0.00 |
| blind | 8 | 0.84 | 0.16 | 0.00 |
| verifier-aware | 1 | 0.42 | 0.58 | 0.00 |
| verifier-aware | 8 | 0.10 | 0.90 | 0.00 |
| ProbeID | judge view, exact | 7B judge | 32B judge | Random | Oracle | |
|---|---|---|---|---|---|---|
| 1 | 1.000 | 0.997 | 0.973 | 0.996 | 0.498 | 1.000 |
| 2 | 0.952 | 0.951 | 0.923 | 0.968 | 0.352 | 1.000 |
| 4 | 0.952 | 0.951 | 0.906 | 0.967 | 0.190 | 1.000 |
| 8 | 0.952 | 0.951 | 0.844 | 0.950 | 0.103 | 1.000 |
| sent | 200 characters | complete | ProbeID | complete, all | |
|---|---|---|---|---|---|
| 1 | 827 | 0.995 | 0.998 | 1.000 | 0.917 |
| 2 | 817 | 0.965 | 0.961 | 0.947 | 0.872 |
| 4 | 792 | 0.962 | 0.957 | 0.946 | 0.842 |
| 8 | 746 | 0.946 | 0.945 | 0.946 | 0.783 |
| ProbeID abstain | ProbeID wrong, all cases | lexical hit@1 | |
|---|---|---|---|
| 1 | 1.00 | 0.00 | 0.998 |
| 2 | 1.00 | 0.00 | 0.991 |
| 4 | 1.00 | 0.00 | 0.983 |
| group ( ) | ProbeID | abstain | dense | Jaccard | chance |
|---|---|---|---|---|---|
| listing (3) | 1.00 | 0.00 | 0.33 | 0.33 | 0.33 |
| reading (2) | – | 1.00 | 0.50 | 0.50 | 0.50 |
| margin | |||||
|---|---|---|---|---|---|
| 0.15 | 0.34 | 0.38 | 0.65 | 0.93 | |
| 0.29 | 0.58 | 0.74 | 0.95 | 1.00 | |
| 0.49 | 0.75 | 0.94 | 0.99 | 1.00 |
| ProbeID | BM25 | Dense | LLM-card | Random | Oracle | |
|---|---|---|---|---|---|---|
| 1 | 1.000 | 0.496 | 0.516 | 0.496 | 0.538 | 1.000 |
| 2 | 0.956 | 0.344 | 0.344 | 0.344 | 0.349 | 1.000 |
| 4 | 0.956 | 0.200 | 0.207 | 0.200 | 0.191 | 1.000 |
| 8 | 0.956 | 0.111 | 0.111 | 0.111 | 0.107 | 1.000 |
| no noise | ten volatile fields | leaf jitter, canon on | ||||
|---|---|---|---|---|---|---|
| selector | canon on | canon off | listed, off | unlisted, on | ||
| ProbeID (structural ) | 0.952 | 0.974 | 0.952 | 0.950 | 0.950 | 0.927 |
| per-probe vote | 0.952 | 0.974 | 0.952 | 0.950 | 0.943 | 0.920 |
| MET style MMD | 0.952 | 0.974 | 0.953 | 0.951 | 0.956 | 0.949 |
| embedding NN | 0.952 | 0.974 | 0.899 | 0.868 | 0.928 | 0.917 |
| exact equality (0/1) | 0.952 | 0.974 | 0.083 | 0.083 | 0.761 | 0.641 |
| (self dist. ) | 256 | 128 | 128 | 64 | 32 |
|---|---|---|---|---|---|
| 2.6 | 2.9 | 5.1 | 5.8 | 5.1 | |
| (self dist. ) | 256 | 256 | 128 | 64 | 64 |
| – | 5.8 | 5.1 | 5.8 | 10.2 |
| source | identity hit@1 at | |||||
|---|---|---|---|---|---|---|
| uniform | 0.10 | 0.33 | 0.53 | 0.73 | 0.90 | |
| 0.27 | 0.50 | 0.70 | 0.93 | 1.00 | ||
| 0.40 | 0.67 | 0.93 | 1.00 | 1.00 | ||
| M1 schema | 0.60 | 0.70 | 0.83 | 1.00 | 1.00 | |
| 0.63 | 0.80 | 0.87 | 1.00 | 1.00 | ||
| family | ProbeID hit@1 at | router | ||||
|---|---|---|---|---|---|---|
| (tool) | ||||||
| filesystem | 0.53 | 0.77 | 0.93 | 1.00 | 0.50 | |
| (read_text_file) | 0.27 | 0.70 | 0.93 | 1.00 | 0.33 | |
| 0.00 | 0.43 | 0.90 | 1.00 | 0.25 | ||
| memory | 0.60 | 0.77 | 0.97 | 1.00 | 0.50 | |
| (open_nodes) | 0.33 | 0.73 | 0.93 | 1.00 | 0.33 | |
| tool | sloppy | faithful | twin | self | twin |
|---|---|---|---|---|---|
| (server) | abstain | dist | dist | ||
| get-sum (everything) | 1.00 | 1.00 | 1.00 | 0.00 | 0.00 |
| echo (everything) | 1.00 | 1.00 | 1.00 | 0.00 | 0.00 |
| read_text_file (fs) | 1.00 | 1.00 | 1.00 | 0.00 | 0.00 |
| open_nodes (memory) | 1.00 | 1.00 | 1.00 | 0.00 | 0.00 |
| probing | self dist | abstain | wrong, all trials | hit@1 |
|---|---|---|---|---|
| naive (shared) | 1.00 | 1.00 | 0.00 | – |
| sandboxed (fresh) | 0.00 | 0.00 | 0.00 | 1.00 |
| tool | squatter drift | hit@1 | misident. |
|---|---|---|---|
| store | write semantics | 1.00 | 0.00 |
| read_secret | auth bypass | 1.00 | 0.00 |
| output size | 1 | 2 | 5 | 10 | 20 | 40 |
|---|---|---|---|---|---|---|
| margin | 0.083 | 0.042 | 0.017 | 0.008 | 0.004 | 0.002 |
| identity hit@1 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 |
| passes margin gate ( ) | yes | no | no | no | no | no |
| regime | servers | tools probed | mean self distance |
|---|---|---|---|
| deterministic | 10 | 35 | 0.00 |
| nondeterministic | 4 | 16 | 0.10–0.92 |
| arm | agent calls | replayed | corrupted | rate | tainted | refused |
|---|---|---|---|---|---|---|
| benign, no gate | 1453 | 1388 | 0 | 0.000 | 0/16 | 0 |
| benign, gate | 1417 | 1347 | 0 | 0.000 | 0/16 | 0 |
| rug pull, no gate | 1575 | 1476 | 93 | 0.063 | 15/16 | 0 |
| rug pull, gate | 1323 | 1159 | 20 | 0.017 | 9/16 | 102 |
| per-probe comparison | corrupted | tainted | refused | probe calls | |
|---|---|---|---|---|---|
| no gate | 93 | 15/16 | 0 | 0 | |
| structural | 35 | 13/16 | 31 | 8,398 | |
| structural | 35 | 13/16 | 68 | 33,891 | |
| structural | 20 | 9/16 | 102 | 126,428 | |
| exact equality | 22 | 8/16 | 84 | 8,412 |
| structural | exact equality | ||||
|---|---|---|---|---|---|
| bound | premise | cells | violations | cells | violations |
| replacement refused, rate | 16 | 0 | 43 | 0 | |
| gold accepted, rate | 539 | 0 | 539 | 0 | |
| joint wrong decision, rate | gold present, | 56 | 0 | 56 | 0 |
| gold returned, rate | , | 6 | 0 | 27 | 0 |
| margin | structural at | exact equality at | ||||||||
| tool | equality | 32 | 128 | 256 | 512 | 8 | 16 | 32 | 64 | |
| mean | 0.941 | 0.941 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| round | 0.465 | 0.465 | 0.003 | 0.000 | 0.000 | 0.000 | 0.460 | 0.184 | 0.003 | 0.000 |
| bmi_bsa_calculator | 0.093 | 0.371 | 1.000 | 0.997 | 0.060 | 0.000 | 0.651 | 0.435 | 0.046 | 0.000 |
| convert_density | 0.177 | 0.883 | 1.000 | 0.000 | 0.000 | 0.000 | 0.001 | 0.000 | 0.000 | 0.000 |
| convert_force | 0.163 | 0.814 | 1.000 | 0.000 | 0.000 | 0.000 | 0.008 | 0.000 | 0.000 | 0.000 |
| structural | exact equality | |||||
|---|---|---|---|---|---|---|
| rule | bound | premise | cells | violations | cells | violations |
| fixed | accept, rate | 879 | 0 | 936 | 0 | |
| fixed | refuse, rate | 586 | 0 | 615 | 0 | |
| fixed | joint wrong decision, rate | 1153 | 0 | 1096 | 0 | |
| fixed | gold returned, rate | , | 272 | 0 | 313 | 0 |
| sequential | refuse, rate | 262 | 0 | 280 | 0 | |
| structural | exact equality | ||||||
| candidate | changed | fixed | sequential | calls | fixed | sequential | calls |
| local tools | |||||||
| gold (unchanged server) | – | 1.000 | 1.000 | 128 | 1.000 | 1.000 | 128 |
| value drift, | 22 | 0.000 | 0.000 | 8 | 0.045 | 0.045 | 14 |
| value drift, | 22 | 0.000 | 0.011 | 82 | 0.045 | 0.056 | 80 |
| value drift, | 22 | 0.636 | 0.744 | 163 | 0.636 | 0.744 | 163 |
| equality, gold absent | structural , gold absent | , gold returned | ||||
|---|---|---|---|---|---|---|
| Hoeffding | exact | Hoeffding | finite pop. | Hoeffding | finite pop. | |
| 8 | 0.154 | 0.004 | 0.807 | 0.807 | 0.000 | 0.000 |
| 16 | 0.079 | 0.000 | 0.773 | 0.760 | 0.128 | 0.128 |
| 32 | 0.006 | 0.000 | 0.750 | 0.750 | 0.158 | 0.158 |
| 64 | 0.000 | 0.000 | 0.552 | 0.238 | 0.244 | 0.247 |
| 128 | 0.000 | 0.000 | 0.135 | 0.075 | 0.250 | 0.250 |
| study | rule | ||
|---|---|---|---|
| Tables J.1 , H.1 and H.2 (ProbeID and judge view; the judges abstain on 0), J.2 , L.1 , L.2 , L.3 (sloppy and faithful); Figures 2 (c), I.1 , K.1 ; Appendices J.1 , K.2 | forced choice | – | – |
| Tables G.1 , G.2 , I.2 , I.3 , L.3 (twin), M.1 , M.2 ; sibling groups | gated | ||
| Table I.1 | gated | ||
| Table N.1 | margin | – | |
| Appendix K.3 | calibrated, swept | – | – |
| Tables P.1 , P.2 ; census gate (Appendix O ) | one-sided gate | self dist. | – |
LLM Agent Verification
LLM agent verification checks whether agents’ actions, evidence, policies, and completion claims satisfy explicit requirements.
See all 147 papers