{"_id":"@afetch/mcp","name":"@afetch/mcp","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@afetch/mcp","version":"0.0.1","description":"A better fetch for agents. Honest completeness, outline-first navigation, and provenance on every page it returns.","keywords":["mcp","model-context-protocol","fetch","agent","llm","readability","provenance","prompt-injection"],"license":"MIT","author":{"name":"Daniel Ahn","url":"https://dannydevs.com"},"repository":{"type":"git","url":"git+https://github.com/Danny-Devs/afetch.git"},"homepage":"https://github.com/Danny-Devs/afetch#readme","bugs":{"url":"https://github.com/Danny-Devs/afetch/issues"},"type":"module","engines":{"node":">=20"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run","typecheck":"tsc --noEmit"},"_id":"@afetch/mcp@0.0.1","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-pisdAunnMaRyWxSfsURUKzv2UYDgeGoiI/FzytJC0cGB3hPZKDfbrU+O4qEdj90CG7+ODA3Y498L4Zj73AjQyg==","shasum":"fe319cc48380fbadccb9a7945ed3a49560e44479","tarball":"https://registry.npmjs.org/@afetch/mcp/-/mcp-0.0.1.tgz","fileCount":3,"unpackedSize":5648,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFYWBy3tI9VzxhFisD8lfDpjeedr6S9b4kmDUeJzPD6QAiEAxB+96v3/ZVa59s5DCzdjJk3MfTVjeZW77alUFx9QlFM="}]},"_npmUser":{"name":"dannydevs","email":"et3rnal.d@gmail.com"},"directories":{},"maintainers":[{"name":"dannydevs","email":"et3rnal.d@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.0.1_1788423691214_0.5862786347673321"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-03T08:21:30.985Z","0.0.1":"2026-09-03T08:21:31.334Z","modified":"2026-09-03T08:21:31.743Z"},"maintainers":[{"name":"dannydevs","email":"et3rnal.d@gmail.com"}],"description":"A better fetch for agents. Honest completeness, outline-first navigation, and provenance on every page it returns.","homepage":"https://github.com/Danny-Devs/afetch#readme","keywords":["mcp","model-context-protocol","fetch","agent","llm","readability","provenance","prompt-injection"],"repository":{"type":"git","url":"git+https://github.com/Danny-Devs/afetch.git"},"author":{"name":"Daniel Ahn","url":"https://dannydevs.com"},"bugs":{"url":"https://github.com/Danny-Devs/afetch/issues"},"license":"MIT","readme":"# afetch\n\n**A better fetch for agents.**\n\n`afetch` is an [MCP](https://modelcontextprotocol.io) server that fetches a web page and hands it\nto your agent as clean, readable text — like every other fetch server. The difference is what it\ntells the agent about what it did.\n\n> **On the name:** `afetch` is to agents what [`ofetch`](https://github.com/unjs/ofetch) is to\n> apps. The resemblance is deliberate homage, not affiliation — `afetch` is an independent\n> project and is not connected to unjs. The package ships as `@afetch/mcp`; the unscoped name is\n> reserved by an unrelated package.\n\n## Why another fetch server\n\nToday's fetch tools know things they don't say. They know they truncated the page. They know the\npage needed JavaScript and they got the shell. They know the text was written by a stranger on\nthe open internet. None of that reaches the model, which then reasons confidently about a\nfragment it believes is whole.\n\n`afetch` says all of it out loud.\n\n**Honest completeness.** Every response reports what you got and what remains — `4,000 of 47,000\ncharacters` — instead of silently cutting at a default limit. An agent that knows it has part of\na page behaves differently from one that thinks it has all of it.\n\n**Outline first.** Along with the content, `afetch` returns the page's heading structure, so an\nagent can jump straight to the section it needs rather than paging through linearly. Cheaper in\ntokens, and better answers.\n\n**Concealment reporting.** Web pages can carry text meant for your agent and hidden from you —\nzero-width characters, invisible Unicode, white-on-white text, commands tucked in HTML comments.\n`afetch` reports where a page hid something. It does not judge what the text means.\n\n**Provenance on every block.** Content arrives labeled with where it came from and a notice that\nit is third-party data, not instructions from you — in the text itself, and in the response\nmetadata, so the label survives whatever your client does with it.\n\n## Install\n\n```jsonc\n// in your MCP client config\n{\n  \"mcpServers\": {\n    \"afetch\": { \"command\": \"npx\", \"args\": [\"-y\", \"@afetch/mcp\"] }\n  }\n}\n```\n\nNode 20+. No API key, no account, no hosted service. The fetch happens on your machine, over your\nconnection, from your IP — nothing passes through us, because there is no us to pass through.\n\n## Who this is for\n\nAnyone whose agent reads the open web and who would rather it be honest about what it got:\ndevelopers running coding agents, and anyone working where sending every URL to a third-party\nscraping service is not an option.\n\n**Who it is not for.** If you need JavaScript-heavy pages rendered by a real browser farm, large-\nscale crawling, or proxy rotation, use a hosted service — [Firecrawl](https://firecrawl.dev) and\n[Jina Reader](https://jina.ai/reader/) are good at that and `afetch` does not try to be.\n\n## What this does not do\n\n**Labeling is not prevention.** Marking text as untrusted tells a model where the text came from;\nit does not stop the model from obeying it. `afetch` reduces harm and improves what an agent\nknows. It is a seatbelt, not a force field, and anyone selling you a force field is selling\nsomething else.\n\n**Concealment detection is not attack detection.** `afetch` reports text a page tried to hide,\nbecause hidden instruction-shaped text has no legitimate purpose. It does not attempt to judge\nwhether visible text is malicious — that is a losing game, and a filter that catches most attacks\nis more dangerous than none, because it manufactures confidence.\n\n## Status\n\nEarly. The interface is not stable and the version number says so.\n\n## License\n\nMIT © Daniel Ahn\n","readmeFilename":"README.md","_rev":"1-8f6c96269977622090a57de08358aaff"}