Small tools for agent builders: AI-writing tells, tools/list token cost, CLAUDE.md lint, and more.
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.
Read a site's robots.txt and report which AI crawlers (GPTBot, ClaudeBot, Google-Extended, PerplexityBot, CCBot, Bytespider and more) are allowed, blocked or partially blocked; check for llms.txt and draft one from the site's metadata and sitemap.
Any URL on the site
Read a site's robots.txt and report which AI crawlers (GPTBot, ClaudeBot, Google-Extended, PerplexityBot, CCBot, Bytespider and more) are allowed, blocked or partially blocked; check for llms.txt and draft one from the site's metadata and sitemap.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any URL on the site |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Any URL on the site"
}
}
}Fetch a URL once and grade its response headers: HSTS, Content-Security-Policy, X-Content-Type-Options, frame control, Referrer-Policy, Permissions-Policy, Cache-Control, cookie Secure/HttpOnly/SameSite flags, and server version leaks. Returns a grade, a score and the exact header to add for each gap.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page to fetch |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The page to fetch"
}
}
}Fetch a URL and report what crawlers and link unfurlers see: title and meta description with lengths, canonical, lang, viewport, robots meta, h1s, Open Graph and Twitter card tags, favicon, JSON-LD types, the resulting preview card, and findings for anything missing or too long.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page to fetch |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The page to fetch"
}
}
}Check a site's sitemaps: discovers them from robots.txt, /sitemap.xml and /sitemap_index.xml, reads index files one level deep (20 children max), counts URLs per file and per host, summarises lastmod, and fetches a sample of URLs (HEAD, then GET) to count the ones that are not 200. Flags a missing sitemap, no robots.txt entry, over 50,000 URLs, other hosts, http URLs on https sites and missing lastmod.
| Argument | Type | Description |
|---|---|---|
| url* | string | Any URL on the site |
| sample | integer | How many sitemap URLs to fetch, default 10, max 25 on free and 100 on Pro |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Any URL on the site"
},
"sample": {
"type": "integer",
"description": "How many sitemap URLs to fetch, default 10, max 25 on free and 100 on Pro"
}
}
}Check text for AI-writing tells (em-dashes, 'not just X but Y', rule-of-three lists, stock vocabulary like delve or seamlessly, hedge words, smart quotes, hidden Unicode) and return a score, each tell with its position, and a cleaned copy. Run it on anything you are about to publish on a human's behalf.
| Argument | Type | Description |
|---|---|---|
| text* | string | The text to check. Free tier: 3,000 chars. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The text to check. Free tier: 3,000 chars."
}
}
}Decode a JWT's header and payload without verifying the signature (it never takes a secret). Returns the claims with iat, nbf and exp as ISO times, a plain-text expiresIn, issuer, subject and audience, and findings: alg none, HS* with a URL-like kid, missing or distant exp, expired, nbf or iat in the future, payload over 4 KB, sensitive field names, and jku or x5u pointing off-site.
| Argument | Type | Description |
|---|---|---|
| token* | string | The JWT, three dot-separated parts. A leading Bearer is ignored. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"description": "The JWT, three dot-separated parts. A leading Bearer is ignored."
}
}
}Explain a five-field cron expression in plain English, list the next runs in UTC, and warn about the cases Cloudflare Workers, GitHub Actions and crontab handle differently (nicknames, six fields, day-of-month plus day-of-week, sub-5-minute intervals, day 31).
| Argument | Type | Description |
|---|---|---|
| from | string | ISO date to compute next runs from, default now |
| count | integer | How many next runs to list, 1 to 20, default 5 |
| expression* | string | e.g. 0 */6 * * 1-5 |
{
"type": "object",
"required": [
"expression"
],
"properties": {
"from": {
"type": "string",
"description": "ISO date to compute next runs from, default now"
},
"count": {
"type": "integer",
"description": "How many next runs to list, 1 to 20, default 5"
},
"expression": {
"type": "string",
"description": "e.g. 0 */6 * * 1-5"
}
}
}Turn a JSON sample (or an array of samples of the same shape) into a JSON Schema draft 2020-12 and a TypeScript type. Infers required vs optional keys across samples, nullable fields, integer vs number, date/email/uri/uuid formats, and small enums. Use it to draft an MCP tool inputSchema from an example payload.
| Argument | Type | Description |
|---|---|---|
| json* | string | The JSON text. Free tier: 20,000 chars. |
| name | string | Type name, default Root |
{
"type": "object",
"required": [
"json"
],
"properties": {
"json": {
"type": "string",
"description": "The JSON text. Free tier: 20,000 chars."
},
"name": {
"type": "string",
"description": "Type name, default Root"
}
}
}Lint a CLAUDE.md, AGENTS.md or MEMORY.md: line count against Claude Code's 200-line memory index cap, estimated tokens, duplicate lines, contradicting rules, leftover TODO markers, hidden characters, empty headings.
| Argument | Type | Description |
|---|---|---|
| text* | string | File contents |
| filename | string | e.g. CLAUDE.md or MEMORY.md; changes the severity of the line cap |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "File contents"
},
"filename": {
"type": "string",
"description": "e.g. CLAUDE.md or MEMORY.md; changes the severity of the line cap"
}
}
}Lint the tools an MCP server lists, from the model's side of the wire: names that break Claude's ^[a-zA-Z0-9_-]{1,64}$ rule, duplicate names, missing or near-identical descriptions, instruction-like text in a description, arguments with no description, required arguments missing from properties, destructive-sounding tools with no destructiveHint, and unbounded free-text arguments on them. Pass a live Streamable HTTP endpoint or a tools array.
| Argument | Type | Description |
|---|---|---|
| url | string | Streamable HTTP MCP endpoint |
| tools | array | Tool definitions, if the server is not reachable over HTTP |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Streamable HTTP MCP endpoint"
},
"tools": {
"type": "array",
"items": {
"type": "object"
},
"description": "Tool definitions, if the server is not reachable over HTTP"
}
}
}Estimate what an MCP server's tools/list costs in tokens on every session start, per tool, with the three most expensive tools and flags for oversized descriptions, base64 blobs and echoed schemas. Pass a live Streamable HTTP endpoint or a tools array.
| Argument | Type | Description |
|---|---|---|
| url | string | Streamable HTTP MCP endpoint |
| tools | array | Tool definitions, if the server is not reachable over HTTP |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Streamable HTTP MCP endpoint"
},
"tools": {
"type": "array",
"items": {
"type": "object"
},
"description": "Tool definitions, if the server is not reachable over HTTP"
}
}
}Generate install snippets for an MCP endpoint (Claude Code, Claude Desktop, Cursor, Codex, VS Code, curl) and probe the endpoint once to confirm it answers initialize and tools/list.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| name | string | Server name to use in configs |
| probe | boolean | |
| headerName | string | |
| headerValue | string |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"name": {
"type": "string",
"description": "Server name to use in configs"
},
"probe": {
"type": "boolean",
"default": true
},
"headerName": {
"type": "string"
},
"headerValue": {
"type": "string"
}
}
}Scrub a .env file into a safe .env.example: every value is blanked or replaced with a placeholder that keeps its shape (postgres://USER:PASSWORD@HOST/DB). Returns the example, the secrets found (AWS, GitHub, Stripe, Slack, Google, OpenAI, Anthropic, Resend, SendGrid, Twilio, Cloudflare, JWTs, private keys, database URLs, high-entropy strings) by key, kind and line with only the first 4 characters and the length, and findings for duplicate keys, non-UPPER_SNAKE names, unbalanced quotes, export prefixes and trailing spaces.
| Argument | Type | Description |
|---|---|---|
| text* | string | The .env file contents. Free tier: 20,000 chars. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The .env file contents. Free tier: 20,000 chars."
}
}
}Trace a URL's redirect chain hop by hop (up to 10 hops, 8 s each) with status, location, timing and scheme per hop. Flags chains over two redirects, loops, HTTPS-to-HTTP downgrades, 302s used for www or https canonicalisation, dropped paths or query strings, cross-domain moves, meta-refresh or JS redirects on a 200, and a final page that is not 200.
| Argument | Type | Description |
|---|---|---|
| url* | string | URL to trace, e.g. http://example.com |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "URL to trace, e.g. http://example.com"
}
}
}