vishwajeet.co WebMCP audit

audited Sep 1, 2026in 11s
90/ 100100% of the applicable check weight evaluated

3 tools registered. Strongest in task completion, weakest in tool quality.

Shared experience88
Task completion100
Tool quality75
Trust100
https://vishwajeet.co
Captured view of https://vishwajeet.co

Tools

3 read, 0 write
Loading map
portfolio_get_profile: warning

portfolio_get_profile

Get Vishwajeet Raj's professional profile, skills, tools, and public links.Answers a question. Declared read only.
pagehttps://vishwajeet.co/
implementation
viaimperative
entry pointdocument
registered after55ms
executepresent
api surfaceTakes no parameters.
annotations
read onlytrue
untrusted contentnot declared
titlenot declared
2 findings
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 3 names do not start with a verb (portfolio_get_profile).
fix
{ name: "portfolio_get_profile" /* short, unique, verb-based */ }
warningDescription quality
weight 5
3 of 3 tool descriptions leave an agent guessing: portfolio_get_profile Does not specify what comes back from the tool..
portfolio_get_profile: weak; portfolio_list_experience: weak; portfolio_list_projects: weak
fix
{
  name: "portfolio_get_profile",
  description: "Describe what this tool does, when to use it, and what it returns."
}
tool json
{
  "name": "portfolio_get_profile",
  "description": "Get Vishwajeet Raj's professional profile, skills, tools, and public links.",
  "inputSchema": null,
  "annotations": {
    "readOnlyHint": true
  }
}
Showing portfolio_get_profile

Findings

Shared experience

88 / 100 · weight 30
passPage experience
weight 20
1 of 4 page-experience marks came back short: obstruction A floating navigation bar partially covers the 'Work Experience' section..
obstruction: weak
passHuman parity
weight 10
The person co-browsing can see and use this page - the same page the agent's tools act on.

Task completion

100 / 100 · weight 25
passTool selection
weight 15
An agent chose an existing, callable tool and built a schema-valid call for all 1 canonical intents, each matching the kind of tool its intent needs. Nothing was executed, so this verifies selection, not outcomes.
not applicableCoverage vs. site type
weight 10
This tool set does not place the site in a category with a known expected tool shape, so there is no coverage baseline to score it against.

Tool quality

75 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 55ms of navigation.
toolportfolio_list_projects
passCanonical entry point
weight 3
All 3 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 2 declared input schemas are structurally valid object schemas. The other 1 tool declares none, which is spec-legal for a zero-argument tool.
warningSchema quality
weight 4
2 of 3 tool schemas are harder for an agent to use than they need to be: portfolio_list_experience declares no required list, so an agent cannot tell which parameters are mandatory.
toolportfolio_list_experience
portfolio_list_experience: declares no required list, so an agent cannot tell which parameters are mandatory; portfolio_list_projects: declares no required list, so an agent cannot tell which paramete
fix
{
  name: "portfolio_list_experience",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 3 names do not start with a verb (portfolio_get_profile).
toolportfolio_get_profile
fix
{ name: "portfolio_get_profile" /* short, unique, verb-based */ }
passStub detection
weight 4
All 3 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
warningDescription quality
weight 5
3 of 3 tool descriptions leave an agent guessing: portfolio_get_profile Does not specify what comes back from the tool..
toolportfolio_get_profile
portfolio_get_profile: weak; portfolio_list_experience: weak; portfolio_list_projects: weak
fix
{
  name: "portfolio_get_profile",
  description: "Describe what this tool does, when to use it, and what it returns."
}

Trust

100 / 100 · weight 20
not applicableAnnotations present
weight 6
No tool name reads like a read, and an absent readOnlyHint already defaults to "this may write" - the one hint worth declaring here is readOnlyHint: true on read tools, and this set has none to declare it on.
passAnnotation mismatch
weight 6
No tool claims to be read-only while its own name or description says it writes (3 declared hints checked).
not applicableUntrusted content hint
weight 4
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
not applicableInjection surface
weight 4
No tool's metadata carries instruction-shaped text aimed at the agent reading it. This check only ever flags; it never credits a site.

Tool selection

100% across 1 intents
I want to portfolio get profile on this site.ok
choseportfolio_get_profileexpected portfolio get profilekind matched
arguments
{}
model: gemini-2.5-flash

Add the tools this site is missing

Our scanner reads your website and suggests the right WebMCP tools for it.
Reads the site's public pages; takes a few seconds.
The open source webmcp plugin teaches your coding agent to audit a site, implement tools on document.modelContext, and verify them in a real browser. npx @ora-ai/webmcp-verify runs the verification on its own. No signup, no hosted service.
how this was captured
observed via
capture shim (Chromium 148.0.7778.96)
chrome
148.0.7778.96
capture shim
v1
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
3
run time
11s
finished
Sep 1, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.