WebMCP report
www.meritplan.rs
https://www.meritplan.rs/
9 tool(s) registered on navigator.modelContext, a name Chrome doesn't support, so visitors can't use them. Changing it to document.modelContext fixes this.
Registered tools
search_postsnavigator.modelContextregisterTool · 10114msSearch posts, pages or custom post types on the site.
inputSchema
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Search keywords."
},
"per_page": {
"type": "integer",
"description": "Results per page (default: 5, max: 20)."
},
"post_type": {
"type": "string",
"description": "Post type slug (default: any)."
}
}
}get_postnavigator.modelContextregisterTool · 10114msRetrieve a single post or page by ID or slug.
inputSchema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "Post ID."
},
"slug": {
"type": "string",
"description": "Post slug."
}
}
}get_menunavigator.modelContextregisterTool · 10114msReturn the items of a navigation menu.
inputSchema
{
"type": "object",
"properties": {
"menu": {
"type": "string",
"description": "Menu name, slug, or ID (default: primary)."
}
}
}submit_contact_formnavigator.modelContextregisterTool · 10114msSubmit a Contact Form 7 form programmatically.
inputSchema
{
"type": "object",
"required": [
"form_id",
"fields"
],
"properties": {
"fields": {
"type": "object",
"description": "Key-value pairs matching the form field names."
},
"form_id": {
"type": "integer",
"description": "CF7 form post ID."
}
}
}get_site_infonavigator.modelContextregisterTool · 10114msReturn basic site metadata (name, description, URL, language).
inputSchema
{
"type": "object",
"properties": []
}get_categoriesnavigator.modelContextregisterTool · 10114msList all post categories with their slugs and counts.
inputSchema
{
"type": "object",
"properties": {
"taxonomy": {
"type": "string",
"description": "Taxonomy slug (default: category)."
}
}
}get_markdown_contentnavigator.modelContextregisterTool · 10114msRetrieve a published post or page as clean Markdown — ideal for AI consumption. Requires Mescio for Agents.
inputSchema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"description": "Post ID."
},
"slug": {
"type": "string",
"description": "Post slug."
}
}
}get_llms_txtnavigator.modelContextregisterTool · 10114msReturn the structured llms.txt context for the whole site — lets agents understand what the site is about at a glance. Requires Mescio for Agents.
inputSchema
{
"type": "object",
"properties": {
"variant": {
"type": "string",
"description": "\"index\" for the summary (default) or \"full\" for the complete content."
}
}
}retrievenavigator.modelContextregisterTool · 10114msRAG retrieve: search published site content and return ranked hits with snippets, Markdown URLs and token estimates. Use this before get_markdown_content. Requires Mescio for Agents.
inputSchema
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Natural-language or keyword query."
},
"per_page": {
"type": "integer",
"description": "Hits to return (default: 5, max: 10)."
},
"post_type": {
"type": "string",
"description": "Optional post type slug (post, page, product, …)."
},
"include_content": {
"type": "boolean",
"description": "If true, attach truncated Markdown for each hit (default: false)."
}
}
}Registration
5/60- Partial
Tools registered with JavaScript R1
5/209 tool(s) registered on navigator.modelContext. Chrome doesn't support that name, so visitors can't use them.
navigator.modelContext is an old name from early drafts of WebMCP. Chrome only supports document.modelContext.
Fix: Change navigator to document. Nothing else needs to change.
- navigator.modelContext.registerTool(tool); + document.modelContext.registerTool(tool);- Tools: search_posts, get_post, get_menu, submit_contact_form, get_site_info, get_categories, get_markdown_content, get_llms_txt, retrieve
- Fail
Tools registered through forms R2
0/5No form tools, and no tools registered with JavaScript.
The quickest way to add a tool is to give a form you already have a toolname attribute. No JavaScript needed.
Fix: Add toolname and tooldescription to an existing form.
<form toolname="search_products" tooldescription="Search the product catalogue. Use when the user wants to find a product." action="/search" method="get"> <input name="query" type="text" required> <button type="submit">Search</button> </form>- Fail
Tools work when called R3
0/30We couldn't test any tools. Skipped 9: search_posts (it's registered on navigator.modelContext, which Chrome doesn't provide); get_post (it's registered on navigator.modelContext, which Chrome doesn't provide); get_menu (it's registered on navigator.modelContext, which Chrome doesn't provide); submit_contact_form (it's registered on navigator.modelContext, which Chrome doesn't provide); get_site_info (it's registered on navigator.modelContext, which Chrome doesn't provide); get_categories (it's registered on navigator.modelContext, which Chrome doesn't provide); get_markdown_content (it's registered on navigator.modelContext, which Chrome doesn't provide); get_llms_txt (it's registered on navigator.modelContext, which Chrome doesn't provide); retrieve (it's registered on navigator.modelContext, which Chrome doesn't provide)
We only call tools that just read information, so a scan never changes anything on your site. We need at least one of those to check that your tools work.
Fix: Mark tools that only read information with readOnlyHint: true, so we can test them.
annotations: { readOnlyHint: true } // only reads, safe to call- Fail
Tools registered within 5 seconds R4
0/5Tools were only registered on navigator.modelContext, which Chrome doesn't support.
Agents look for tools right after the page loads. Tools that show up late can be missed.
Fix: Register tools when the page loads, not after a click or inside a slow script.
if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", registerTools, { once: true }); } else { registerTools(); }
Tool quality
5/15- Fail
Valid input schemas Q1
0/51 of 9 tool(s) have schema problems: • get_site_info: not valid JSON Schema. schema is invalid: data/properties must be object
Agents read the schema to know what to send. A type and a short description on each field help them send the right thing.
Fix: Give every field a type and a short description.
inputSchema: { type: "object", properties: { query: { type: "string", description: "What to search for" }, limit: { type: "integer", description: "How many results to return (default 10)" } }, required: ["query"] }- search_posts: 3 field(s), all described.
- get_post: 2 field(s), all described.
- get_menu: 1 field(s), all described.
- submit_contact_form: 2 field(s), all described.
- get_categories: 1 field(s), all described.
- get_markdown_content: 2 field(s), all described.
- get_llms_txt: 1 field(s), all described.
- retrieve: 4 field(s), all described.
- Pass
Clear descriptions Q2
3/3All 9 tool(s) have a description.
- search_posts: "Search posts, pages or custom post types on the site."
- get_post: "Retrieve a single post or page by ID or slug."
- get_menu: "Return the items of a navigation menu."
- submit_contact_form: "Submit a Contact Form 7 form programmatically."
- get_site_info: "Return basic site metadata (name, description, URL, language)."
- get_categories: "List all post categories with their slugs and counts."
- get_markdown_content: "Retrieve a published post or page as clean Markdown — ideal for AI consumption. Requires Mescio for Agents."
- get_llms_txt: "Return the structured llms.txt context for the whole site — lets agents understand what the site is about at a glance. R… (146 chars total)"
- retrieve: "RAG retrieve: search published site content and return ranked hits with snippets, Markdown URLs and token estimates. Use… (182 chars total)"
- Pass
Clear names Q3
2/2All 9 tool name(s) are specific.
- Names: search_posts, get_post, get_menu, submit_contact_form, get_site_info, get_categories, get_markdown_content, get_llms_txt, retrieve
- Fail
Read-only hints Q4
0/39 of 9 tool(s) don't say whether they change anything: • search_posts: readOnlyHint isn't set. • get_post: readOnlyHint isn't set. • get_menu: readOnlyHint isn't set. • submit_contact_form: readOnlyHint isn't set. • get_site_info: readOnlyHint isn't set. • get_categories: readOnlyHint isn't set. • get_markdown_content: readOnlyHint isn't set. • get_llms_txt: readOnlyHint isn't set. • retrieve: readOnlyHint isn't set.
readOnlyHint tells agents whether a tool only reads information or changes something. Agents can use read-only tools freely and check with the user before the rest.
Fix: Set readOnlyHint on every tool: true if it only reads, false if it changes something.
annotations: { readOnlyHint: true, untrustedContentHint: true // optional: results include text from users or other sites }- Not assessed
Result size Q5
0/2No tool returned a result, so this wasn't checked.
Fix: Get a tool returning results first (see R3).
Ready for visitors
25/25- Pass
HTTPS with a valid certificate P1
5/5The page uses HTTPS with a valid certificate.
- Connected to www.meritplan.rs over HTTPS.
- Issuer: Let's Encrypt
- Valid until: Nov 14 12:38:48 2026 GMT
- Pass
Origin trial token P2
15/15Found an origin trial token in a meta tag, so Chrome turns WebMCP on for your visitors.
- Token: A7vZI3v+Gz7JfuRolKNM4Aff6zaGuT7X0mf3wtoZTnKv6497cVMnhy03KDqX… (292 chars total)
- Pass
No errors blocking tools P3
5/5No errors stopped your tools from registering.
- No Content-Security-Policy header.
Scan details
- Requested
- https://www.meritplan.rs/
- Final URL
- https://www.meritplan.rs/
- HTTP status
- 200
- Page title
- Merit Plan | Ljudski resursi i organizacioni razvoj
- Load time
- 8984ms
- Total scan time
- 49046ms
- User agent
- Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36