TechFabric
by techfabric.com · remote · no sign-in to list tools · v1.3.0 · published by com.techfabric
For TechFabric engineers to write posts and case studies from their coding agent; anyone can read
14 tools: 2 can delete or cancel things, 7 change things and 5 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things7Claude Code: ask: see these tools
- Only reads5Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http techfabric https://www.techfabric.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnget_brief
The server marks "get_brief" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_brief" says "get": a word for reading.
- Warnget_status
The server marks "get_status" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "get_status" says "get": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
14 tools
Deletes or cancels 2Claude Code: deny
publish_draftRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- The name "publish_draft" says "publish": a word for a change that another call does not undo.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. Publish one of your own drafts to techfabric.com, exactly as the browser editor's Publish does, and only after the engineer confirms. It needs check_draft with the id to have passed on exactly the saved text (any save after it needs a new check), no save in flight, and the draft not open in the browser editor. The first call publishes nothing: it asks the engineer "Publish '<title>' to techfabric.com now?" by elicitation where the client supports it; otherwise it returns a one-time confirmation (ten minutes, this exact text) that you send back as confirmation on a second call, only after asking the engineer that question and hearing yes. review_before_publishing returns the same confirmation as a read, which a host asks no approval for. Then the site merges and deploys it (a few minutes); get_status shows state published and live_url. A failed merge or deploy brings the draft back to drafted with what failed. When only wording and style checks failed, override names them to publish past (Publish anyway, as in the editor, and recorded); the hard set never. confirm_via "token" asks for the one-time confirmation instead of an elicitation, for a UI that asks the engineer itself.
Annotations the server declares
- title: Publish a draft
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
update_draftRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- The name "update_draft" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. Save a new version of one of your own drafts, as the browser editor's Save does: only while it waits on you (state drafted), only on top of the text you edited (base_hash from get_status, or the text_hash your last update_draft returned), and never while it is open in the browser editor. It answers in a second or two, once the text is stored, with its text_hash and status "saved; preview rebuilding"; the commit and the preview follow in the background (get_status and the app show them). Nothing waits for that: lint_draft and check_draft with the id read the saved text at once. It runs no checks (lint_draft the text first; then check_draft with the id verifies the saved text, which publish_draft needs). A case study stays a case study (its kind is fixed at submit_draft) and may send new sources. Never publishes.
Annotations the server declares
- title: Update a draft
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
Changes things 7Claude Code: ask
check_draftRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. The final verification: techfabric.com's full readiness checks (the browser editor's own Run checks: the draft's items and every site gate, the model-read ones by our judge, Clef, cached by text). With id, it checks your saved draft, and that run is what publish_draft needs: call it once, on the final text, after lint_draft passes and you've reviewed the draft against its judge_rubric. Without id, it checks a post's Markdown, with its frontmatter, or a case study's with kind "case-study" and its sources (its own checks: the four sections, the client rule, a source for every number, then the site's voice, slop and claims gates), filing nothing. A full check takes about five to ten minutes: a client with the tasks extension gets a task to poll; otherwise this waits up to wait_seconds, then returns progress, and the same markdown and images again reads on (nothing runs twice). Returns each item's status and findings, with the passage each finding is about.
Annotations the server declares
- title: Check a draft
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_briefRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.1 finding
Why it is in this group
- The name "get_brief" says "get": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "get_brief" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "get_brief" says "get": a word for reading.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. Today's topic for a daily draft, claimed for the signed-in engineer for 24 hours: a news story the content agent picked in the last two days, or a search we don't answer yet that matches the engineer's own work. Returns the topic, the angle, why it was chosen, the target search, sources, internal links to use, the editorial_rules URI and the brief_id to pass to submit_draft. Asking again the same day returns the same brief. When techfabric.com's pace (one automated post a day, three a week) is used up, today's brief has gone to a colleague, or nothing fits, it answers status none with the reason: stop there. No model is called. Ask the engineer for first-hand detail; never invent it.
Annotations the server declares
- title: Today's brief
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_statusRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.1 finding
Why it is in this group
- The name "get_status" says "get": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "get_status" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "get_status" says "get": a word for reading.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. One of your own drafts: its state, what is failing, the last check run, its current Markdown and base_hash (for update_draft; base_sha also works), the preview link, and once published its live_url. Never the editor link: the engineer has it by email. When the writer is waiting on a fact only you have, this asks you for it first.
Annotations the server declares
- title: Draft status
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
lint_draftRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. techfabric.com's rule-based checks (no model), run at once on the post's Markdown (frontmatter included) in about a second, at no cost: the draft's own items (diagram, depth, title and description, FAQ, placeholders, images, links) and the site gates (slop and banned words, claims and partner tiers, known errors, voice, opening, density, title, search snippet, diagrams, images, a case study's own rules). Each finding names its passage and what to do. Also returns judge_rubric: what the model-read checks will ask of this exact draft (the reader, each question, its threshold, the first screen the buyer test reads, the house opening pattern), for your own review. With id instead of markdown, it lints your saved draft's text, at once after update_draft. Call it as often as you like; it files nothing. Iterate with this, never with check_draft.
Annotations the server declares
- title: Lint a draft
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
review_before_publishingRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. A read (it changes nothing): everything publish_draft needs, checked now for one of your own drafts, and if it may be published, the question to ask the engineer ("Publish '<title>' to techfabric.com now?") with a one-time confirmation: ten minutes, this exact saved text and check run, used once. Only after the engineer says yes, call publish_draft with the same id, confirmation set to it (and the same override, if any). If it may not be published yet, it says why. The draft app's Publish button uses it, then asks the engineer itself.
Annotations the server declares
- title: Review before publishing
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
revise_postRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- The name "revise_post" says "post": a word for a change.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. Open a revision of a post that is already live on techfabric.com, to change it: only the post's author (its byline is the signed-in engineer's) or the blog's editor. Takes the post's URL or slug. Its first draft is the live text, on its own branch with its own preview, emailed to the engineer with the editor link; the result's first line is the preview. From there it is a draft like any other: get_status with the returned id gives its markdown and base_sha, then lint_draft (with slug), update_draft, check_draft with the id, and publish_draft, which asks the engineer to confirm. Publishing replaces the live post at the same URL under the same byline, keeps its publish date and shows Updated; the byline and the URL can't change in a revision, and a change made to the live post meanwhile is merged in, never overwritten. Asking again for the same post returns the revision already open.
Annotations the server declares
- title: Change a published post
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
submit_draftRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- The name "submit_draft" says "submit": a word for a change.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. File a post into techfabric.com's blog pipeline under the signed-in engineer's own byline. The post, frontmatter required (title and description at least), becomes the draft exactly as sent (no model rewrites or fact-checks it; your agent writes, repairs and checks the facts): the site renders its diagrams, puts its images in blog media, builds the preview and emails it with the editor and approve links. With kind "case-study" it files a case study at /case-studies/<slug> instead, with its sources; a client the register does not approve needs client_confirmed: true, the engineer's word that the client agreed. Run lint_draft first, until it passes. Never publishes: publish_draft does, after check_draft with the id passes and the engineer confirms. Returns the idea id; a client with the tasks extension gets a task that completes when the preview is up.
Annotations the server declares
- title: Submit a draft
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 5Claude Code: allow
get_pageOne published page of www.techfabric.com as clean Markdown, with its title, search title (metaTitle), description, date, updated, author, tags, FAQs as question and answer pairs, a…No findings
Why it is in this group
- The name "get_page" says "get": a word for reading.
Description, as the server wrote it One published page of www.techfabric.com as clean Markdown, with its title, search title (metaTitle), description, date, updated, author, tags, FAQs as question and answer pairs, and canonical URL. Takes a URL, a path or a post's slug. Only published, indexable pages.
Annotations the server declares
- title: Read a page
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_servicesEvery service, solution, Databricks, AI, cloud, software, accelerator and product page on techfabric.com: its name, URL, kind and summary, exactly as the live page states them.No findings
Why it is in this group
- The name "get_services" says "get": a word for reading.
Description, as the server wrote it Every service, solution, Databricks, AI, cloud, software, accelerator and product page on techfabric.com: its name, URL, kind and summary, exactly as the live page states them. Read one in full with get_page.
Annotations the server declares
- title: List services
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_postsTechFabric's blog posts, newest first, optionally only those with a tag, by an author, or dated on or after a day.No findings
Why it is in this group
- The name "list_posts" says "list": a word for reading.
Description, as the server wrote it TechFabric's blog posts, newest first, optionally only those with a tag, by an author, or dated on or after a day.
Annotations the server declares
- title: List blog posts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
preview_draftRequires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge.No findings
Why it is in this group
- The name "preview_draft" says "preview": a word for reading.
Description, as the server wrote it Requires a TechFabric engineer's Microsoft sign-in (scope blog.write); an anonymous call is answered with the sign-in challenge. One of your own drafts as techfabric.com renders it (a read: it changes nothing), for the draft app (MCP Apps) in a host that shows apps: the page from its preview, its last check run with each check marked as one an author may publish past or one that must pass, and whether Publish may run. In any host, its text starts with the preview link: show that link to the engineer.
Annotations the server declares
- title: Preview a draft
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
searchSearch TechFabric's published site: blog posts, service and solution pages, case studies, city pages and events.No findings
Why it is in this group
- The name "search" says "search": a word for reading.
Description, as the server wrote it Search TechFabric's published site: blog posts, service and solution pages, case studies, city pages and events. Returns each match's title, URL, summary, date, author and type, best first. Read a result in full with get_page.
Annotations the server declares
- title: Search techfabric.com
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http techfabric https://www.techfabric.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__techfabric__search",
"mcp__techfabric__get_page",
"mcp__techfabric__list_posts",
"mcp__techfabric__get_services",
"mcp__techfabric__preview_draft"
],
"ask": [
"mcp__techfabric__get_brief",
"mcp__techfabric__lint_draft",
"mcp__techfabric__check_draft",
"mcp__techfabric__submit_draft",
"mcp__techfabric__get_status",
"mcp__techfabric__review_before_publishing",
"mcp__techfabric__revise_post"
],
"deny": [
"mcp__techfabric__update_draft",
"mcp__techfabric__publish_draft"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as techfabric. Review it before you use it.