Overview
Website Tech Stack Detector fetches the page and matches its response headers, cookies, HTML, meta tags, script URLs, inline scripts and DNS records against a fingerprint set of more than 7,000 technologies, refreshed weekly from an open, community-maintained database. Technologies implied by another (WordPress implies PHP) are marked as implied. Rendered mode loads the page in a headless browser so technologies injected by JavaScript, and those only visible as JavaScript globals, are found too.
Live Test Website Tech Stack Detector Source →
The tool
Once your client is connected to the VerveContext server, this appears in its tool list as WebsiteTechStackDetector. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "WebsiteTechStackDetector",
"arguments": {
"url": "https://wordpress.org"
}
}You do not name the tool yourself; the model picks it. Asking about https://wordpress.org in the terms this source covers is enough for it to reach for WebsiteTechStackDetector on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every source in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervecontext": {
"url": "https://api.vervecontext.com/v1/mcp"
}
}
}https://api.vervecontext.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
urlRequired | string | The URL of the website to analyze url |
renderOptionalPremium | boolean | Load the page in a headless browser first, to find technologies added by JavaScript and read JavaScript globals. Slower |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"url": "https://wordpress.org/",
"finalUrl": "https://wordpress.org/",
"statusCode": 200,
"mode": "static",
"technologyCount": 13,
"technologies": [
{
"name": "WordPress",
"slug": "wordpress",
"categories": [
"CMS",
"Blogs"
],
"version": "7.2",
"confidence": 100,
"implied": false,
"detectedBy": [
"html",
"scriptSrc",
"scripts",
"headers",
"meta",
"dom"
],
"website": "https://wordpress.org",
"icon": "WordPress.svg",
"description": "WordPress is a free and open-source content management system written in PHP and paired with a MySQL or MariaDB database. Features include a plugin architecture and a template system.",
"cpe": "cpe:2.3:a:wordpress:wordpress:*:*:*:*:*:*:*:*"
},
{
"name": "WordPress Block Editor",
"slug": "wordpress-block-editor",
"categories": [
"Page builders"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"html"
],
"website": "https://wordpress.org/gutenberg/",
"icon": "WordPress.svg",
"description": "Sites using the WordPress Block Editor, also known as Gutenberg.",
"cpe": null
},
{
"name": "WordPress Site Editor",
"slug": "wordpress-site-editor",
"categories": [
"Page builders"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"html"
],
"website": "https://wordpress.org/documentation/article/site-editor/",
"icon": "WordPress.svg",
"description": "Full Site Editing enables users to design and customize their entire WordPress website with a block-based editor.",
"cpe": null
},
{
"name": "Gutenberg",
"slug": "gutenberg",
"categories": [
"WordPress plugins",
"Editors"
],
"version": "24.2.0",
"confidence": 100,
"implied": false,
"detectedBy": [
"scriptSrc",
"dom"
],
"website": "https://github.com/WordPress/gutenberg",
"icon": "Gutenberg.png",
"description": "Gutenberg is the code name for the new block based editor introduced in WordPress 5.",
"cpe": null
},
{
"name": "MySQL",
"slug": "mysql",
"categories": [
"Databases"
],
"version": null,
"confidence": 100,
"implied": true,
"detectedBy": [],
"website": "https://mysql.com",
"icon": "MySQL.svg",
"description": "MySQL is an open-source relational database management system.",
"cpe": "cpe:2.3:a:mysql:mysql:*:*:*:*:*:*:*:*"
},
{
"name": "PHP",
"slug": "php",
"categories": [
"Programming languages"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"scripts"
],
"website": "https://php.net",
"icon": "PHP.svg",
"description": "PHP is a general-purpose scripting language used for web development.",
"cpe": "cpe:2.3:a:php:php:*:*:*:*:*:*:*:*"
},
{
"name": "Nginx",
"slug": "nginx",
"categories": [
"Web servers",
"Reverse proxies"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"headers"
],
"website": "https://nginx.org/en",
"icon": "Nginx.svg",
"description": "Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.",
"cpe": "cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*"
},
{
"name": "Google Font API",
"slug": "google-font-api",
"categories": [
"Font scripts"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"dom"
],
"website": "https://fonts.google.com/",
"icon": "Google Font API.svg",
"description": "Google Font API is a web service that supports open-source font files that can be used on your web designs.",
"cpe": null
},
{
"name": "Google Tag Manager",
"slug": "google-tag-manager",
"categories": [
"Tag managers"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"html"
],
"website": "https://www.google.com/tagmanager",
"icon": "Google Tag Manager.svg",
"description": "Google Tag Manager is a tag management system (TMS) that allows you to quickly and easily update measurement codes and related code fragments collectively known as tags on your website or mobile app.",
"cpe": null
},
{
"name": "HSTS",
"slug": "hsts",
"categories": [
"Security"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"headers"
],
"website": "https://www.rfc-editor.org/rfc/rfc6797#section-6.1",
"icon": null,
"description": "HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.",
"cpe": null
},
{
"name": "Priority Hints",
"slug": "priority-hints",
"categories": [
"Performance"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"dom"
],
"website": "https://wicg.github.io/priority-hints/",
"icon": "Priority Hints.svg",
"description": "Priority Hints exposes a mechanism for developers to signal a relative priority for browsers to consider when fetching resources.",
"cpe": null
},
{
"name": "Open Graph",
"slug": "open-graph",
"categories": [
"Miscellaneous"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"dom"
],
"website": "https://ogp.me",
"icon": "Open Graph.svg",
"description": "Open Graph is a protocol that is used to integrate any web page into the social graph.",
"cpe": null
},
{
"name": "RSS",
"slug": "rss",
"categories": [
"Miscellaneous"
],
"version": null,
"confidence": 100,
"implied": false,
"detectedBy": [
"dom"
],
"website": "https://www.rssboard.org/rss-specification",
"icon": "RSS.svg",
"description": "RSS is a family of web feed formats used to publish frequently updated works—such as blog entries, news headlines, audio, and video—in a standardized format.",
"cpe": null
}
],
"fingerprintsUpdatedAt": "2026-10-19T01:59:39.005Z"
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
url | string | https://wordpress.org/ | The URL that was requested |
finalUrl | string | https://wordpress.org/ | The URL after redirects |
statusCode | number | 200 | HTTP status the website returned |
mode | string | static | static for a plain fetch, rendered when the page was loaded in a browser |
technologyCount | number | 13 | Number of technologies detected |
technologies | array[13] | Detected technologies, most significant categories first | |
technologies.0.name | string | WordPress | Technology name, such as WordPress |
technologies.0.slug | string | wordpress | URL-safe identifier for the technology, such as wordpress |
technologies.0.categories | array | ["CMS","Blogs"] | Categories the technology belongs to, such as CMS or Analytics |
technologies.0.versionPremium | string | 7.2 | Detected version, when the page reveals one |
technologies.0.confidence | number | 100 | Confidence from 0 to 100 that the technology is present |
technologies.0.implied | boolean | false | True when the technology was inferred from another detection rather than seen directly |
technologies.0.detectedBy | array | ["html","scriptSrc","scripts"] | Signals that matched: url, html, scriptSrc, scripts, css, text, headers, cookies, meta, dns, js or dom. Empty for implied technologies |
technologies.0.website | string | https://wordpress.org | The technology's official website |
technologies.0.icon | string | WordPress.svg | Icon file name in the open fingerprint database's icon set |
technologies.0.description | string | WordPress is a free and open-source content management system written in PHP and paired with a MySQL… | Short description of the technology |
technologies.0.cpePremium | string | cpe:2.3:a:wordpress:wordpress:*:*:*:*:*:*:*:* | CPE 2.3 identifier for matching against vulnerability databases, when one exists |
fingerprintsUpdatedAt | string | 2026-10-19T01:59:39.005Z | ISO 8601 timestamp of the fingerprint database refresh used |
Why ground on it
A model can produce something that looks like this answer from its training data, and be confidently out of date or simply wrong. This source returns the current value in a shape you can check, which is the difference between an answer you can cite and one you have to hedge.
Point an evaluation at finalUrl: it is the field most worth pinning a claim to, and it is either present and current or absent — never plausibly invented.
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This source is not part of VerveContext. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 30 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Sales Prospecting
- Qualify leads by the platform they run on, such as finding Shopify stores or WordPress sites before outreach.
- Competitor Research
- See which analytics, A/B testing and marketing tools competing sites have installed.
- Security Inventory
- List the software and versions a site exposes, and match CPE identifiers against vulnerability feeds.
- Agency Audits
- Profile a prospect's website stack before a redesign or migration proposal.
Other ways to use Website Tech Stack Detector
Set up Website Tech Stack Detector on VerveContext, or reach the same source a different way. Your VerveContext account and credits work on all of them — one key, one balance.
Related
More in Data Scraping: