
Browser fingerprinting for web apps: integration code for any framework, docs search and pricing.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Where a setup link stands. The first check after the person finishes returns the API keys (and the server key, if requested); they are not shown again. While they're still on the page, check again every few seconds.
The id create_setup_link returned (sl_…).
The token create_setup_link returned (tt_setup_…).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Where a setup link stands. The first check after the person finishes returns the API keys (and the server key, if requested); they are not shown again. While they're still on the page, check again every few seconds.
| Argument | Type | Description |
|---|---|---|
| id* | string | The id create_setup_link returned (sl_…). |
| token* | string | The token create_setup_link returned (tt_setup_…). |
{
"type": "object",
"required": [
"id",
"token"
],
"properties": {
"id": {
"type": "string",
"description": "The id create_setup_link returned (sl_…)."
},
"token": {
"type": "string",
"description": "The token create_setup_link returned (tt_setup_…)."
}
},
"additionalProperties": false
}Gets TraceTail API keys for the person you work for: returns a link to give them, where they sign in with an emailed code and add a card or continue without a card, and a token. Then call check_setup_link with its id and token every few seconds: once they've finished, it returns an API key for each site (and a server key if you asked), once.
| Argument | Type | Description |
|---|---|---|
| string | The person's email, if you know it: it prefills the page. | |
| domains* | array | The sites to create API keys for, like ["example.com", "localhost"]; include localhost for local development. |
| serverKey | boolean | Also create a server key, so the backend can verify identifications. |
{
"type": "object",
"required": [
"domains"
],
"properties": {
"email": {
"type": "string",
"description": "The person's email, if you know it: it prefills the page."
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"description": "The sites to create API keys for, like [\"example.com\", \"localhost\"]; include localhost for local development."
},
"serverKey": {
"type": "boolean",
"description": "Also create a server key, so the backend can verify identifications."
}
},
"additionalProperties": false
}The exact install command and code to add TraceTail browser fingerprinting (a stable visitor ID for each browser, without cookies) to a web app built with the given framework, with where each file goes. Works without an API key (keyless mode, no sign-up); pass the site's public API key to fill it in.
| Argument | Type | Description |
|---|---|---|
| apiKey | string | The site's public TraceTail API key (tt_…), if it has one. Leave out to use the placeholder. |
| framework* | string | The app's framework: html (a plain script tag), javascript (any bundler), react, nextjs, vue, nuxt, angular or svelte. |
| firstPartyPath | string | The path of the site's first-party proxy, e.g. /k3v9, to load TraceTail from the site's own domain. |
{
"type": "object",
"required": [
"framework"
],
"properties": {
"apiKey": {
"type": "string",
"description": "The site's public TraceTail API key (tt_…), if it has one. Leave out to use the placeholder."
},
"framework": {
"enum": [
"html",
"javascript",
"react",
"nextjs",
"vue",
"nuxt",
"angular",
"svelte"
],
"type": "string",
"description": "The app's framework: html (a plain script tag), javascript (any bundler), react, nextjs, vue, nuxt, angular or svelte."
},
"firstPartyPath": {
"type": "string",
"pattern": "^\\/[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])$",
"description": "The path of the site's first-party proxy, e.g. /k3v9, to load TraceTail from the site's own domain."
}
},
"additionalProperties": false
}TraceTail's prices and limits (1,000 identification requests free every month, then $0.10 per 1,000), with the monthly cost at a given volume and the same volume on Fingerprint (FingerprintJS) for comparison.
| Argument | Type | Description |
|---|---|---|
| monthlyRequests | integer | Expected identification requests a month. |
{
"type": "object",
"properties": {
"monthlyRequests": {
"type": "integer",
"maximum": 10000000000,
"minimum": 0,
"description": "Expected identification requests a month."
}
},
"additionalProperties": false
}Returns a page of the TraceTail site as Markdown: "/docs" (the full documentation), "/pricing", "/vs-fingerprintjs", "/" (overview) or a blog post.
| Argument | Type | Description |
|---|---|---|
| path* | string | The page's path on tracetail.io. |
{
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"enum": [
"/",
"/pricing",
"/docs",
"/live-demo",
"/vs-fingerprintjs",
"/fingerprintjs-alternatives",
"/blog",
"/contact",
"/status",
"/privacy-policy",
"/terms-and-conditions",
"/blog/how-browser-fingerprinting-works",
"/blog/tracetail-vs-fingerprintjs",
"/blog/detecting-bots-without-cookies",
"/blog/browser-fingerprint-signals-explained",
"/blog/fingerprinting-without-cookies",
"/blog/gdpr-compliant-fingerprinting",
"/blog/browser-fingerprinting-research-2024-2025",
"/blog/banking-fraud-prevention",
"/blog/future-browser-fingerprinting",
"/blog/ecommerce-fraud-prevention",
"/blog/defeating-sophisticated-fraud",
"/blog/gaming-platform-security",
"/blog/privacy-first-fingerprinting",
"/blog/travel-hospitality-fraud-prevention",
"/blog/resilient-authentication"
],
"type": "string",
"description": "The page's path on tracetail.io."
}
},
"additionalProperties": false
}Searches TraceTail's documentation, pricing, comparison and blog for a topic (e.g. "next.js", "rate limits", "ad blockers", "GDPR", "server-side verification") and returns the matching sections with their URLs.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many results to return (default 5). |
| query* | string | What to look for. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "How many results to return (default 5)."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "What to look for."
}
},
"additionalProperties": false
}