facebook-web-mcp
The facebook-web-mcp server enables safe, human-paced interaction with your Facebook account via a real Chrome browser, offering read-only research tools and staged write operations that require explicit confirmation. Key capabilities include:
Session & login management:
check_facebook_sessionverifies login state;open_facebook_loginopens a browser for manual login (no password storage). Human handles CAPTCHAs/2FA.Search & discovery:
search_facebook,search_groups,search_pagesfind posts, groups, pages, people.Reading content:
open_group,search_in_group,open_page,open_post,read_post,read_comments,get_post_details, andbrowse_feed(home or groups feed) fetch structured posts and comments.Lead research:
find_relevant_postsscans groups/feed for help requests, scoring relevance with explanations;draft_commentprovides post context to craft replies.Staged write (safety-gated):
post_comment,create_post,react_to_post,share_postonly stage actions, returning previews and confirmation tokens.confirm_actionis the sole executor, using single-use tokens, TTL, and a write budget. All writes are verified post-execution.list_pending_actionsandcancel_actionmanage staged items.Maintenance & diagnostics:
selector_healthcheckmonitors DOM selector health;debug_page_structureinspects live page markup for selector repair.
Provides tools to interact with Facebook through the website, including searching groups and pages, reading posts and comments, posting comments, creating posts, reacting, and sharing content using your own Facebook account.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@facebook-web-mcpcheck my Facebook feed and summarize new posts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Facebook Web MCP
A local MCP server that lets Claude Code use your Facebook account through the normal Facebook website, in a real Chrome window you can watch.
Not a Graph API integration. There is no app id, no access token, and no password stored anywhere. Authentication is a persistent Chrome profile that you log into by hand, once.
Setup
Requirements: Node ≥ 20.11, Google Chrome, and an MCP client (Claude Code, Claude Desktop, or anything else that speaks MCP over stdio).
git clone https://github.com/Mrshahidali420/facebook-web-mcp.git
cd facebook-web-mcp
npm install
npm run build
claude mcp add facebook-web -- node "$PWD/dist/index.js"Or install straight from GitHub without cloning — it compiles itself on install:
npm install github:Mrshahidali420/facebook-web-mcp
claude mcp add facebook-web -- node "$PWD/node_modules/facebook-web-mcp/dist/index.js"Clone if you intend to fix a selector or send a pull request; the shorter form is enough if you only want to run it.
Installing this way, set FB_MCP_PROFILE_DIR to somewhere stable:
claude mcp add facebook-web \
--env FB_MCP_PROFILE_DIR="$HOME/.facebook-web-mcp/profile" \
-- node "$PWD/node_modules/facebook-web-mcp/dist/index.js"Without it the profile defaults to inside node_modules/, and reinstalling or
updating the package deletes your session and logs you out.
Install into a project directory, not globally.
npm install -gfails on a git install: npm builds the package in a temporary clone, and for global installs it skips devDependencies, sotscis missing and the build exits 1. A local install gets them and builds correctly.
Then just ask Claude to log you in — it calls open_facebook_login, which
raises a Chrome window at Facebook and watches while you sign in. It types
nothing and submits nothing; the polling exists only so it can confirm the
profile was saved. If you need longer than the wait window (a 2FA code, a
checkpoint), the call simply returns — the window stays open and your progress
is not lost, so calling it again picks up where you were.
There is also a standalone equivalent that does not need Claude running:
npm run loginIt opens a Chrome window at Facebook and then waits. You do the
typing. Complete any 2FA prompt or security check in that same window. When the
session goes live it confirms and exits, and the session is saved to .fb-profile/.
If Chrome is not where Playwright expects it:
npx playwright install chromeCheck the server registered:
claude mcp list # facebook-web should report ✔ ConnectedStart every session with check_facebook_session.
Related MCP server: Neo MCP
The safety model
Tools split cleanly in two.
Read-only — run immediately. check_facebook_session, open_facebook_login, search_facebook,
search_groups, search_pages, open_group, search_in_group, open_page,
open_post, read_post, read_comments, get_post_details, browse_feed,
find_relevant_posts, draft_comment, list_pending_actions, cancel_action,
selector_healthcheck.
Write — staged, never immediate. post_comment, create_post,
react_to_post, share_post.
A write tool does not write. It returns a preview and a token:
ACTION: Post a public comment on a Facebook post
TARGET: https://www.facebook.com/groups/…/posts/…
GROUP: UK WordPress & Web Development
AUTHOR: Jane Smith
POSTED: 3h
THE POST YOU ARE REPLYING TO:
Anyone know why my product pages dropped out of Google last week?
YOUR COMMENT, EXACTLY AS IT WILL BE PUBLISHED:
Sounds like an indexing issue rather than a ranking one — worth checking
Search Console's Pages report for "Crawled – currently not indexed".
This will be visible to everyone who can see the post, under your own name.confirm_action(token) is the only tool in the server that changes anything.
Four things enforce that, in code rather than in prose:
Guard | What it stops |
Single-use tokens | One approval can never execute twice. |
Payload binding | Editing the text supersedes the old token, so text you approved is the only text that can be sent. |
TTL (10 min default) | Yesterday's approval cannot fire today. |
Write budget (3 per process) | A loop cannot fan out into bulk posting. It hard-fails and needs a restart. |
require_confirmation: false is refused unless FB_MCP_ALLOW_UNCONFIRMED=1 is
set in the server's environment. The switch lives in your environment, not in a
parameter the model fills in.
It will not claim success it cannot prove
After every write, the server goes and looks:
Comment — polls the post's comment list for your comment.
Post — polls your feed for the published post.
Reaction — re-reads the reaction control's state.
Share — polls your feed for the shared post.
If it cannot confirm within the timeout, the result is status: "unverified"
with what was actually observed, never "ok". "I clicked submit" and "the
comment exists" are different facts and stay different all the way to Claude.
What it will not do
No CAPTCHA solving, no 2FA entry, no checkpoint clicking, no bot-detection
evasion, no stealth plugins, no user-agent spoofing. There is no code path that
types into a challenge — src/facebook/auth.ts only detects them and hands
the browser back to you.
When Facebook signals a rate limit, the server stops and backs off. It does not retry harder.
Lead research
find_relevant_posts({
group_urls: ["https://www.facebook.com/groups/wordpressuk"],
topics: ["wordpress", "seo", "indexing", "search console"],
posts_per_group: 30
})Scoring is deliberately strict: a post needs both a service topic and a request-for-help signal to score well. "We migrated to WordPress last year" is discussion, not a lead. Self-promotion and already-resolved threads are scored down hard, and recency is a multiplier rather than a bonus.
Every lead carries a plain-English relevance sentence explaining its score, so
the ranking can be audited rather than trusted:
{
"post_url": "https://www.facebook.com/groups/…/posts/…",
"group_name": "UK WordPress & Web Development",
"score": 0.78,
"relevance": "Asking for help (can anyone recommend); about wordpress, dropped out of google; posted in the last day; phrased as a question.",
"matched_keywords": ["wordpress", "dropped out of google"],
"matched_intent": ["can anyone recommend"],
"negative_signals": []
}Then draft_comment returns the post plus its existing comments and anti-spam
guidance, you write the reply, post_comment stages it, and nothing reaches
Facebook until you say so.
When Facebook changes its markup
It will. The design assumes it.
All DOM knowledge lives in exactly one file: src/facebook/selectors.ts.
Nothing else in the project contains a CSS selector.
Each element is an ordered candidate list rather than one selector:
tier 1 ARIA role + accessible name survives class churn and rewrites
tier 2 structural attributes internal contracts, fairly stable
tier 3 structural relationships shape of the tree
tier 4 visible text locale-dependent, last resortThe resolver records which tier actually matched. When a tier-1 candidate stops
matching and extraction quietly falls through to a text heuristic, everything
still works — and selector_healthcheck reports it as degraded. That is the
early warning, before the last candidate dies too and tools start returning
empty arrays.
A total miss throws SelectorMissError naming the strategy. It never returns
null, and never an empty array that looks like "no results".
{ "posts": [], "reason": "no_posts_visible" } is a real answer and is kept
distinct from a failure to read the page. Silent failure is the bug class this
design refuses.
Layout
src/
├── index.ts stdio server entry
├── login.ts one-time interactive login helper
├── config.ts env config — contains no credential fields, by design
├── logger.ts JSONL to logs/, human lines to stderr, never stdout
├── errors.ts typed failures carrying an instruction for the human
├── types.ts Zod schemas for Post, Comment, Group, Page
├── browser/ session lifecycle, pacing, navigation — knows nothing about Facebook
├── facebook/
│ ├── selectors.ts ← the only file with DOM knowledge
│ ├── resolve.ts strategy resolver + health tracking
│ ├── auth.ts login / challenge detection
│ ├── urls.ts search URLs, tracking-param stripping, id extraction
│ ├── extract/ post, comment, entity, parsing helpers
│ ├── pages/ search, group, page, post, feed, home
│ └── actions/ comment, createPost, engage — each verifies afterwards
├── approvals/ token store + preview rendering
├── leads/ keyword sets and pure scoring
└── tools/ MCP tool definitions — never import PlaywrightConfiguration
Everything is optional; defaults are used with no .env at all. See
.env.example for the full list. The ones worth knowing:
Variable | Default | Why you would change it |
|
| Raise only if you genuinely need more writes in one session. |
|
| How long a confirmation token stays valid. |
| unset | Leave it unset. |
|
| Where the logged-in session lives. |
|
| Keep it false — headed is how you handle challenges. |
|
| Pacing between navigations. |
.fb-profile/ is your Facebook session and is gitignored. Deleting it logs
you out. Never commit it, and never copy it anywhere.
Development
npm run typecheck
npm test # 107 unit tests, no browser required
npm run buildTests cover the parts where being wrong is expensive: lead scoring calibration,
the approval store's four guards, the require_confirmation gate, timestamp and
count parsing, and URL normalisation.
ARCHITECTURE.md covers the design in depth, and
docs/facebook-dom-notes.md records what has actually been observed in
Facebook's markup.
Contributing
Contributions are welcome — particularly selector fixes, which are the most common thing that breaks and the most useful thing to receive.
Read CONTRIBUTING.md first. It covers the three rules that are not negotiable (DOM knowledge lives in one file; writes stage rather than execute; never claim success you cannot prove) and the list of changes that will not be merged — CAPTCHA solving, bot-detection evasion, credential storage, and anything that weakens the confirmation gate.
By participating you agree to the Code of Conduct. Security issues go through SECURITY.md, never a public issue.
Disclaimer
This is an independent project. It is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc.
It automates a browser against a site whose terms of service restrict automated access. Using it may violate those terms and could result in your account being restricted or disabled. That risk is yours, and it is the reason the write budget, the confirmation gate, and the human-paced delays exist rather than being tunable away.
Use it on your own account. Do not use it to scrape, mass-message, harass, or impersonate anyone.
Provided without warranty of any kind — see sections 15 and 16 of the LICENSE.
Licence
Copyright (C) 2026 Shahid Ali
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Available Tools
24 toolsbrowse_feedBrowse a feedARead-only
Read the logged-in account's own Facebook feed. source: "groups" reads every joined group's posts in one stream instead of the home timeline — each post still names the group it came from. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum posts to return | |
| source | No | "home" is the main timeline; "groups" is the combined feed of every group you have joined | home |
| expand_text | No | Click "See more" on truncated posts. Slower, but truncated text loses the detail that makes a post worth finding. | |
| scroll_rounds | No | How many times to scroll for more posts. Each round costs a few seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the bar is lower. The description adds value by explaining the groups stream behavior and that each post names its group, which is not obvious from the schema alone. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and then the groups variant. Every sentence earns its place; the only minor redundancy ('Read-only') is a single word and not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the rich schema descriptions and annotations, adequately covers this read-only list tool. It does not describe the return format, but no output schema exists and the schema already explains parameter effects, so this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all four parameters thoroughly. The description adds minimal extra meaning; it reinforces the source parameter but does not introduce new semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the logged-in account's own Facebook feed, using a specific verb ('Read') and resource. It also distinguishes the 'groups' source variant, which sets it apart from sibling tools like read_post or search_facebook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explanation of 'source: groups' gives clear context for choosing between the home timeline and the combined groups feed. However, it does not explicitly mention alternatives or when not to use this tool, stopping short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_actionCancel a staged actionARead-only
Discard a staged write action so its token can never be used. Use this when the user rejects or changes a draft.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmation_token | Yes | Token of the staged action to discard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool 'Discard[s]' an action and that the token 'can never be used,' implying a permanent, state-changing effect, yet annotations declare readOnlyHint=true and destructiveHint=false. This directly contradicts the description's side-effect profile, making the behavior dangerously unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences and is front-loaded with the core action and consequence. Every word earns its place, with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's single parameter, clear use case, and absence of an output schema, the description provides sufficient context for most scenarios. However, the contradiction between the description's irreversible effect and the read-only annotation creates a significant gap in overall comprehension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the lone parameter (confirmation_token) is already fully documented in the schema as 'Token of the staged action to discard.' The description adds no further parameter-level detail beyond echoing the token concept, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Discard') and a clear resource ('a staged write action'), explicitly stating the irreversible consequence ('so its token can never be used'). It clearly distinguishes this from sibling tools like confirm_action and list_pending_actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case ('Use this when the user rejects or changes a draft'). However, it does not explicitly state when not to use the tool or name alternative tools, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_facebook_sessionCheck Facebook sessionARead-only
Report whether the persistent browser profile is logged into Facebook. Launches the browser on first use. Never logs in, and never answers a security challenge — if one is present it says so and leaves the window open for the user to handle. Run this before anything else in a session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true and openWorldHint=true, the description adds valuable behavioral details: it launches the browser on first use, never interacts with login flows, and if a security challenge appears, it reports it and leaves the window open for the user. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose. Every sentence adds distinct value: what it reports, side effects (browser launch), and boundaries (never logs in/challenge handling) plus the explicit usage directive. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema check tool, the description covers all necessary context: the exact question it answers, its side effects, its non-actions, and when to run it. There is no ambiguity; an agent can correctly invoke it without further information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially 100% covered. Per the rubric, 0 params yields a baseline of 4. The description adds no parameter-specific meaning, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Report whether the persistent browser profile is logged into Facebook,' a specific verb ('Report') and resource ('persistent browser profile') that clearly states the tool's function. It is also distinguished from siblings like 'open_facebook_login' by explicitly stating it never logs in.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Run this before anything else in a session.' It also provides when-not-to-use context by stating it never logs in and never answers security challenges, implying that other tools (e.g., open_facebook_login) are needed for those actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_actionConfirm and execute a staged actionA
Execute a previously staged write action. This is the ONLY tool in this server that changes anything on Facebook. Call it only after the user has seen the preview and explicitly approved that exact content. Tokens are single-use and expire. The result reports whether the action was verified on Facebook afterwards — a status of "unverified" means it may or may not have gone through, and must not be reported to the user as success.
| Name | Required | Description | Default |
|---|---|---|---|
| fingerprint | No | Optional: the fingerprint from the staged action, checked against the payload | |
| confirmation_token | Yes | The token returned by the staging tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations. While the annotations indicate readOnlyHint=false, the description adds critical behavior: tokens are single-use and expire, and the verification result may be 'unverified' meaning the action 'may or may not have gone through' and must not be reported as success. This is exactly the kind of nuanced behavioral context an agent needs. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core function ('Execute a previously staged write action'), then packs essential usage constraints and result interpretation into a compact second sentence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explains what the result reports ('verified' vs 'unverified') and how to handle the ambiguous case. It covers prerequisites (user approval of exact content), token usage constraints, and the scope of the tool ('only tool that changes anything'). This is sufficiently complete for a tool with two simple parameters and a nuanced side effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters, so the baseline is 3. The description adds value by explaining the token lifecycle (single-use, expires) and the verification outcome associated with the confirmation_token. It also implies the fingerprint is tied to the staged payload. This supplements the schema descriptions without fully re-explaining each parameter, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: 'Execute a previously staged write action.' It also identifies the exact resource (previously staged actions) and distinguishes the tool from siblings by noting it is 'the ONLY tool in this server that changes anything on Facebook.' This is a specific verb+resource pairing with strong differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Call it only after the user has seen the preview and explicitly approved that exact content.' It also implies when not to use by stating the tool is the only one that changes anything, leaving staging to sibling tools. Token expiry and single-use behavior are also stated as usage constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_postCreate a post (staged)A
Stage a new post on your own timeline, optionally with one local image or video. This does NOT publish anything: it validates any attachment, builds a preview of the exact text, and returns a confirmation_token. Show the preview to the user and call confirm_action only after explicit approval.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The exact post text that will be published | |
| image_path | No | Absolute path to a local image to attach | |
| video_path | No | Absolute path to a local video to attach | |
| require_confirmation | No | Must be true. Setting it false is refused unless the server operator has explicitly enabled unconfirmed writes in the environment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations (readOnlyHint=false, destructiveHint=false) by detailing the staging behavior: it validates attachments, builds a preview, and returns a confirmation_token. It also discloses that nothing is published and that user approval is required before confirm_action. These are significant behavioral traits not present in the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose, and every sentence adds meaningful context (staging, no publish, validation/preview/token, approval flow). There is no redundant repetition of schema or annotations, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explains the key return value (confirmation_token) and the workflow (preview then confirm). It covers the tool's main behavioral contract, including the validation step and the explicit requirement for user approval. The sibling tools include confirm_action, which the description correctly references as the follow-up, making the tool's role in the overall flow complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline for this dimension is 3. The description adds valuable semantics by stating 'optionally with one local image or video', which clarifies that image_path and video_path are mutually exclusive—a nuance not enforced by the schema. It does not discuss require_confirmation, but the schema already covers that. This added nuance justifies a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Stage a new post on your own timeline', which is a specific verb ('stage') and resource ('post on your own timeline'). It clearly differentiates from sibling tools like post_comment (commenting) and share_post (sharing) by emphasizing the staging aspect. The phrase 'does NOT publish anything' further disambiguates it from a direct publishing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: to stage a post for later confirmation. It provides a clear when-not ('does NOT publish anything') and a direct next-step action ('call confirm_action only after explicit approval'). This is explicit guidance beyond a vague context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_page_structureInspect live page structure (maintenance)ARead-only
Report what is actually rendered on the page the browser is currently showing: how many elements match each probe selector, plus their tag, attribute names, text length and a short text preview. Use this to repair src/facebook/selectors.ts against real markup after a Facebook redesign, instead of guessing. Read-only, and it does not navigate — point the browser somewhere with a read tool first.
| Name | Required | Description | Default |
|---|---|---|---|
| sample | No | How many matched elements to describe per probe | |
| selectors | No | CSS selectors to probe. Defaults to the feed/post container candidates. | |
| show_attributes | No | Attribute names whose VALUES to include, e.g. ["aria-label","data-ad-rendering-role"]. Attribute names alone are often not enough to tell two candidates apart. | |
| text_preview_chars | No | How much text to preview per element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive, but the description adds valuable behavioral detail beyond that: it does not navigate, and it enumerates the output composition (tag, attribute names, text length, preview). This gives the agent a reliable mental model of what the tool will do and return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary function, then use case, then a critical caveat. Every sentence carries information and there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a maintenance/diagnostic tool with 4 well-documented parameters, no output schema, and strong annotations, the description is sufficient. It explains what the tool reports, when to use it, and a critical constraint (does not navigate). No essential context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all 4 parameters have descriptions). The tool description itself does not revisit parameter details, which is acceptable because the schema fully documents each parameter. It earns the baseline 3; no additional parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and resource ('page the browser is currently showing'), and details exactly what is reported (match counts, tag, attribute names, text length, preview). It clearly distinguishes itself from siblings by framing the tool as a way to fix selector files against real markup after a redesign, rather than guessing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear when-to-use context: 'Use this to repair src/facebook/selectors.ts against real markup after a Facebook redesign, instead of guessing.' It also instructs on a prerequisite ('point the browser somewhere with a read tool first') and states the tool does not navigate. However, it does not explicitly name any alternative tool or exclusion criteria, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_commentPrepare a comment draft briefARead-only
Open a post and return everything needed to write a genuinely useful reply to it: the full post text, its context, and the existing comments so you do not repeat advice someone has already given. Returns a brief for YOU to write the comment from — it does not generate text, and it does not post anything.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | Register for the reply | helpful |
| intent | No | What you want the reply to achieve, e.g. "explain why their pages are not indexed and offer to look" | |
| post_url | Yes | Permalink of the post to reply to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description complements the readOnlyHint annotation by clarifying it does not generate text or post anything, and returns a brief for the agent to use. This adds behavioral context beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and output, and clearly states non-behaviors without waste. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description adequately describes the brief's contents (post text, context, existing comments). It could mention login prerequisites, but sibling tools like check_facebook_session cover that context, so it is sufficiently complete for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add specific meaning to parameters like tone or intent beyond the schema, but it implicitly frames them as inputs to the brief, maintaining the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens a post and returns a brief containing post text, context, and existing comments, explicitly distinguishing it from generating or posting. This specific verb+resource+scope differentiates it from siblings like read_post and post_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use: before writing a reply, to gather needed information and avoid repeating existing advice. It explicitly notes the tool does not post, distinguishing it from post_comment, but does not name alternatives like read_post or read_comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_relevant_postsFind relevant posts across groupsARead-only
Omit group_urls to sweep the combined feed of every group you have joined — the fastest way to see what is actually being asked across all of them, and which groups are producing nothing. Point this at groups where CLIENTS post ("I need a website for my business", "I need a web developer") rather than developer or freelancer groups. Measured 2026-08-01: a 24K-member WordPress developer group returned zero leads from 12 posts, and correctly so — every post was someone selling. Demand-side groups are where the requests are. Scan one or more Facebook Groups and return the posts most likely to be genuine requests for help with the services you offer, ranked with a plain-English reason for each score. A post must both mention a relevant topic AND read as asking for help to score well; self-promotion and already-resolved threads are scored down hard. Read-only — it finds leads, it does not contact anyone.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum leads to return overall | |
| since | No | ISO date; drop posts known to be older than this | |
| until | No | ISO date; drop posts known to be newer than this | |
| topics | No | Known topics to match. Available: wordpress, web development, seo, technical seo, search console, indexing, local seo, website fixes, page speed, hosting and migration, security, ecommerce. Unknown names are treated as literal keywords. | |
| keywords | No | Extra literal keywords to match on top of the topics | |
| min_score | No | Drop anything scoring below this | |
| group_urls | No | Group URLs to scan. Omit to scan the combined feed of every group you have joined. | |
| search_terms | No | If set, uses Facebook's in-group search with these terms instead of reading each group's recent feed. Much faster, but only finds what Facebook's search surfaces. | |
| scroll_rounds | No | Scroll passes per group | |
| posts_per_group | No | How many posts to read from each group |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false; the description reinforces these with 'Read-only — it finds leads, it does not contact anyone' and adds meaningful behavioral details: how scoring works (relevant topic + asking for help), penalties for self-promotion and resolved threads, and the demand/supply group distinction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense and front-loaded with the most actionable instruction ('Omit group_urls to sweep...'). The 2026-08-01 anecdote is illustrative but could be trimmed; overall, nearly every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description explains what the tool returns (ranked leads with plain-English reasons), the scoring criteria, group selection strategy, and its read-only safety profile. It fully covers the tool's complexity and leaves no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaningful strategic context for key parameters like group_urls ('Omit to sweep the combined feed... fastest way') and search_terms ('Much faster, but only finds what Facebook's search surfaces'), but most parameter semantics remain in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's action: scanning Facebook Groups and returning posts likely to be genuine service requests, ranked with plain-English reasons. It distinguishes itself from siblings like search_in_group and browse_feed by emphasizing cross-group lead scoring and demand-side targeting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is explicitly directed: omit group_urls for a combined feed, target demand-side groups rather than developer/freelancer groups, and use search_terms for faster but limited search. A concrete example ('a 24K-member WordPress *developer* group returned zero leads') reinforces when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_detailsGet full post detailsARead-only
Everything about one post in a single call: the post itself plus a sample of its comments. Use this when deciding whether a post is worth replying to. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| post_url | Yes | Permalink to the post | |
| comment_sample | No | How many comments to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and non-destructive, so the description's 'Read-only' adds no new safety info. However, it does disclose that it returns a 'sample' of comments, a behavioral limitation not captured by annotations or schema, which is valuable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the core functionality and then provide a use case. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema) and strong annotations, the description provides sufficient context: what it returns, when to use it, and its read-only nature. It could mention return format details, but the schema and annotations cover the essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both post_url and comment_sample having clear descriptions. The tool description adds no extra parameter meaning, so the baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a post plus a sample of its comments in a single call, using the specific verb 'get' and resource 'post details'. This distinguishes it from siblings like read_post and read_comments, which focus on individual components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this when deciding whether a post is worth replying to, providing a clear use case. It does not explicitly name alternatives or exclusions, but the context strongly implies this is the go-to for a quick post+comments overview, which is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pending_actionsList staged actionsARead-only
Show write actions that are staged and waiting for confirmation, with their previews and expiry times. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds that the actions are 'staged' with previews and expiry times. This provides useful context beyond the annotations, though it could mention behavior like empty lists or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence of 15 words, front-loaded with the action and resource. Every word adds value, with no redundancy beyond the repeated 'Read-only' which matches annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter read-only list tool, the description is complete. It specifies what is returned (previews and expiry times) and the context (staged actions), and sibling tools complete the workflow picture. No output schema is present, but the description adequately conveys return content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (vacuously). The description does not need to explain parameters, and the baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and identifies a clear resource ('write actions that are staged and waiting for confirmation'), including details like previews and expiry times. This distinguishes it from sibling tools like 'confirm_action' and 'cancel_action'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: to review staged write actions before confirmation. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to understand its role in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_facebook_loginOpen the Facebook login windowARead-only
Launch the browser, bring the window to the front on Facebook, and wait for the user to log in by hand. Types nothing and submits nothing — it only watches for the session to go live so it can confirm the profile was saved. Safe to call when already logged in: it reports that immediately without disturbing the page. If the user needs longer than wait_seconds (a 2FA code, a checkpoint), the call returns and you simply call it again or run check_facebook_session — the window stays open and their progress is not lost.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_seconds | No | How long to watch for the login to complete. Default 45s; long values may exceed your client's tool timeout. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description reveals important behavioral traits: it 'only watches for the session to go live,' reports immediately if already logged in, and on timeout 'the window stays open and their progress is not lost.' No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main action, and each sentence serves a purpose: launch, wait, safety, and timeout handling. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers all relevant scenarios: success, already logged in, timeout, and fallback options (call again or check session). The agent receives enough information to invoke correctly and interpret outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers wait_seconds fully (100% coverage). The description adds context by explaining what happens when the parameter expires (e.g., 2FA code, checkpoint) and advises calling again, enriching the parameter's functional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Launch the browser, bring the window to the front on Facebook, and wait for the user to log in by hand.' It distinguishes from siblings like check_facebook_session by specifying it watches for the session to go live rather than merely checking it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: safe when already logged in, and if more time is needed, 'simply call it again or run check_facebook_session.' It also clarifies it 'types nothing and submits nothing,' indicating it is not for automated login, thus steering agents to use it as a waiting/reporting tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_groupOpen a Facebook GroupARead-only
Open a group and read its visible posts, newest first by default. Returns the group's metadata plus each post with its URL, author, text and timestamp. Read-only — it will not join the group. Private groups you are not a member of will return group metadata and no posts, which is reported explicitly rather than as an error.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | "recent" sorts chronologically — better for finding live requests | recent |
| limit | No | Maximum posts to return | |
| group_url | Yes | Group URL, e.g. https://www.facebook.com/groups/wordpressuk | |
| expand_text | No | Click "See more" on truncated posts. Slower, but truncated text loses the detail that makes a post worth finding. | |
| scroll_rounds | No | How many times to scroll for more posts. Each round costs a few seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnlyHint annotation by explicitly stating it will not join the group, describing behavior for private groups (returns metadata and no posts) and clarifying that this is reported explicitly rather than as an error. This adds valuable behavioral context not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary action, and every sentence adds meaningful information (behavior, return data, edge cases). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains the return value (group metadata plus posts with URL, author, text, timestamp). It also covers an important edge case (private groups). It does not detail every metadata field, but the coverage is sufficient given the schema describes parameters and the description handles the key behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with each parameter having a detailed description. The main description adds little beyond the schema, only mentioning 'newest first by default' which aligns with the sort parameter's default. This meets the baseline for high schema coverage but does not add substantial extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('open a group and read its visible posts'), the resource (Facebook group), and the scope (visible posts, newest first). It distinguishes from sibling tools like search_groups or open_page by focusing on reading posts from a known group and explicitly describing the return data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this to open a group and read posts, noting the default sort order and private-group behavior. It does not explicitly name alternatives or when-not-to-use scenarios, but the context is sufficiently clear for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_pageOpen a Facebook PageARead-only
Open a Facebook Page and read its visible posts. Returns Page metadata plus posts. Read-only — it will not follow or like the Page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum posts to return | |
| page_url | Yes | Page URL, e.g. https://www.facebook.com/somebusiness | |
| expand_text | No | Click "See more" on truncated posts. Slower, but truncated text loses the detail that makes a post worth finding. | |
| scroll_rounds | No | How many times to scroll for more posts. Each round costs a few seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description reinforces this with 'Read-only — it will not follow or like the Page' and adds what the tool returns (Page metadata plus posts). This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The main action and read-only nature are front-loaded, and every clause adds meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with strong annotations and full schema coverage, the description sufficiently covers purpose and return type. It does not describe response structure or pagination, but with no output schema and given the scope, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 4 parameters have schema descriptions (100% coverage), so the baseline is 3. The tool description does not add parameter-specific context beyond the schema, which already explains limit, expand_text, and scroll_rounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (open), resource (Facebook Page), and expected outcome (read visible posts, return metadata plus posts). The read-only clarification distinguishes it from sibling tools that interact (follow, like, comment, post).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading a page's posts without providing explicit when-to-use guidance or naming alternatives. The read-only statement indirectly suggests it over interaction tools, but does not say when to choose open_page over search_pages, browse_feed, or read_post.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_postOpen a postARead-only
Open a single post by URL and return its full content: author, text (expanded), timestamp, engagement counts, group or Page attribution, and any external link. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| post_url | Yes | Permalink to the post |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description echoes 'Read-only.' The description adds useful detail about expanded text and engagement counts, but these are return-content details rather than additional behavioral caveats. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states purpose, return content, and read-only nature with no filler. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description lists the expected return fields (author, text, timestamp, engagement counts, attribution, external link), making expectations clear for a simple read-only tool. It lacks error-case or URL-format caveats but remains adequate for the tool's low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter post_url, which is described as 'Permalink to the post.' The description repeats 'by URL' but adds no new format, validation, or usage details beyond the schema. Baseline 3 applies where schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's function: 'Open a single post by URL and return its full content' and enumerates specific return fields (author, text, timestamp, engagement counts, attribution, external link). This is a specific verb+resource that distinguishes it from sibling tools like read_post by emphasizing URL-based retrieval and expanded content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is for fetching a specific post by permalink, but the description does not explicitly state when to use this tool versus alternatives like read_post or get_post_details. No exclusions or alternative scenarios are provided, so guidance remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_commentComment on a post (staged)A
Stage a comment on a Facebook post. This does NOT post anything: it opens the post, builds a preview showing the post and your exact comment text, and returns a confirmation_token. Show the preview to the user and call confirm_action only after they explicitly approve it.
| Name | Required | Description | Default |
|---|---|---|---|
| post_url | Yes | Permalink of the post to comment on | |
| comment_text | Yes | The exact comment text that will be published | |
| require_confirmation | No | Must be true. Setting it false is refused unless the server operator has explicitly enabled unconfirmed writes in the environment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the annotations: it does not actually post, it builds a preview, and it returns a confirmation_token. This explains the two-phase commit pattern, which is not evident from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the core purpose and then clarifying the critical non-posting behavior. Every sentence earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description mentions the confirmation_token and the required follow-up (confirm_action), covering the essential output and next step. It is complete for a staged-action tool with a well-specified schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have detailed schema descriptions, so the baseline is 3. The description adds little beyond the schema, only reinforcing that comment_text is the exact text to be published. It does not introduce new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Stage a comment on a Facebook post', which is a specific verb+resource. It explicitly contrasts with actual posting by saying 'This does NOT post anything', distinguishing it from siblings like create_post and confirm_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear workflow guidance: 'Show the preview to the user and call confirm_action only after they explicitly approve it.' This tells the agent exactly when to use this tool and what next step to invoke, differentiating the staging action from the committing action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
react_to_postReact to a post (staged)A
Stage a reaction on a post. Does NOT react yet — returns a preview and a confirmation_token. Reactions are public and attributed to you, so they go through the same approval step as comments.
| Name | Required | Description | Default |
|---|---|---|---|
| post_url | Yes | Permalink of the post | |
| reaction | No | Which reaction to apply | like |
| require_confirmation | No | Must be true. Setting it false is refused unless the server operator has explicitly enabled unconfirmed writes in the environment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavioral details beyond the annotations: it does not actually react, returns a preview and confirmation_token, and reactions are public/attributed. This adds significant context about the two-step process and social consequences, with no contradiction to the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the essential staged behavior, followed by the public/approval context. No wasted words; every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description compensates by mentioning the preview and confirmation_token. It also places the tool in the broader approval flow. Minor gap: it does not explicitly link to confirm_action or explain how the token is used, but the sibling list and existing context make this inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters (post_url, reaction, require_confirmation) are already documented. The description adds no new parameter-level detail beyond what the schema provides, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Stage' and explicitly states it does NOT react yet, clearly distinguishing it from an actual mutation. It also contextualizes the tool within the approval workflow by mentioning the confirmation token and the same approval step as comments, differentiating it from immediate-action tools like post_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this tool is for staged reactions requiring subsequent confirmation, and it notes the public/attributed nature as a caution. It does not explicitly name alternatives (e.g., confirm_action) or state when not to use it, but the context is strong enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_commentsRead a post's commentsARead-only
Read the comment thread on a post. Attempts to switch the thread out of Facebook's "Most relevant" ordering into "All comments" and says in the result whether that succeeded — so you know whether you are seeing the whole thread or a filtered selection. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum comments to return | |
| post_url | Yes | Permalink to the post | |
| sort_all | No | Try to switch the thread to "All comments" | |
| expand_replies | No | Expand reply threads one level deep | |
| load_more_rounds | No | How many "view more comments" clicks to make |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals a significant behavioral trait beyond the readOnlyHint/destructiveHint annotations: the tool attempts to reorder comments into 'All comments' and reports whether the switch succeeded. This gives the agent important context about response interpretation, which the annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. The main purpose is front-loaded, the behavioral nuance is explained in one clause, and the read-only safety note reinforces the annotation without being redundant. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with 5 parameters and no output schema, the description adequately covers the key outcome (comments and the success flag for ordering switch). It could mention the structure of the returned comments, but the openWorldHint and the simplicity of the operation make this a minor gap rather than a critical omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are documented in the schema (100% coverage), providing the baseline of 3. The description adds semantic depth to the 'sort_all' parameter by explaining why the ordering switch matters (knowing whether the thread is filtered) and that the result indicates success. The other parameters are self-explanatory from schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource pair: 'Read the comment thread on a post.' It also distinguishes from sibling tools like read_post by focusing specifically on comments and mentions the unique behavior of switching to 'All comments' ordering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied ('if you need comments, use this'), but the description does not explicitly mention alternatives or exclusion criteria. It does provide useful situational context about the 'Most relevant' vs 'All comments' ordering, but stops short of saying 'use this instead of X'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_postRead a postBRead-only
Identical to open_post: fetch one post by URL and return its full content. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| post_url | Yes | Permalink to the post |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description confirms 'Read-only' but adds no additional behavioral context such as authentication, rate limits, or response specifics. It is consistent with the annotations but contributes minimal extra value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the action and outcome. It is front-loaded with the key operation and contains no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations, the description covers the core function and mentions return content. However, the explicit statement 'Identical to open_post' creates ambiguity about tool selection and fails to justify the existence of both tools, leaving the context incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes post_url as 'Permalink to the post' with 100% coverage. The description merely restates 'post by URL' without adding format, validation, or usage details, so it adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'fetch' and identifies the resource as a post by URL, stating it returns full content. However, it says 'Identical to open_post' without explaining any distinction, which slightly weakens its ability to uniquely identify the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description references 'open_post' as an identical alternative but provides no guidance on when to use this tool instead. It does not state any conditions, prerequisites, or exclusions, leaving the agent without clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_facebookSearch FacebookARead-only
Search Facebook and return structured results. result_type picks the search tab: posts, groups, pages or people. Read-only. Results are limited to what the Facebook UI actually renders for your account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | What to search for, exactly as you would type it into Facebook search | |
| location | No | Optional place to bias the search, e.g. "UK" or "Manchester". Facebook web search has no structured location filter, so this is appended to the query text. | |
| result_type | No | Which search tab to read | posts |
| scroll_rounds | No | How many times to scroll for more results. Each round costs a few seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only behavior is already declared in annotations, but the description adds useful context that results are limited to what the Facebook UI actually renders for the user's account. This gives insight into result variability beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, front-loaded with the primary action, and contains no filler. Every sentence provides relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, safety, and a key limitation. There is no output schema, and the description mentions 'structured results' without specifying the structure, which is a minor gap. Overall, it is sufficient for a search tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents all five parameters. The description only restates the result_type behavior already present in the schema enum, adding no additional parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a Facebook search and returns structured results, with result_type explicitly selecting the tab. However, it does not distinguish this from sibling tools like search_groups or search_pages, which are more specialized.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the general search entry point by mentioning the different tabs, but it does not explicitly state when to use this over the specialized sibling tools. There are no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_groupsSearch Facebook GroupsARead-only
Find Facebook Groups matching a query. Returns each group's name, URL, privacy setting, member count and, where visible, whether this account is already a member. Read-only — it never sends a join request.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | What to search for, exactly as you would type it into Facebook search | |
| location | No | Optional place to bias the search, e.g. "UK" or "Manchester". Facebook web search has no structured location filter, so this is appended to the query text. | |
| scroll_rounds | No | How many times to scroll for more results. Each round costs a few seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description explicitly states 'Read-only — it never sends a join request,' which adds specific behavioral context. It also notes that membership status is shown 'where visible,' providing useful nuance about data availability. This adds value without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary purpose and return fields, and ends with a key safety guarantee. Every sentence earns its place with zero redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: purpose, returned data, and read-only behavior. Since there is no output schema, the explicit mention of return fields is valuable. It could further mention session requirements or pagination nuances, but these are covered by the schema and sibling tooling, making it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides complete descriptions (100% coverage) for all four parameters, including constraints and defaults. The description does not add additional parameter-level meaning beyond what the schema offers, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find Facebook Groups matching a query.' It uses a specific verb and resource, and distinguishes from sibling tools like search_facebook and search_pages by focusing on groups and enumerating the returned fields (name, URL, privacy, member count, membership status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (searching for groups) and implies a safe read-only operation, but it does not explicitly discuss alternatives or when not to use it. The sibling list shows other search tools, but the description alone doesn't draw that comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_in_groupSearch within a GroupARead-only
Use Facebook's own in-group search to find posts matching a query inside one group. Much cheaper than scrolling the whole feed when you already know the keyword. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum posts to return | |
| query | Yes | Search terms to run inside the group | |
| group_url | Yes | Group URL | |
| expand_text | No | Click "See more" on truncated posts. Slower, but truncated text loses the detail that makes a post worth finding. | |
| scroll_rounds | No | How many times to scroll for more posts. Each round costs a few seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and destructiveHint false, so the description's 'Read-only' adds little beyond the annotation. However, it adds behavioral context by noting it uses Facebook's native in-group search and is 'much cheaper' than scrolling, which gives the agent cost/benefit awareness. No disclosure of potential limitations or return format, so additional behavior is not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose in the first sentence. The second sentence provides a usage guideline and the third repeats a safety clue. No redundant content beyond the read-only note, which is harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema fully documents parameters and annotations cover safety, the description provides sufficient context for a search tool: scope (inside one group), trigger (known keyword), and cost comparison. The absence of an output schema is not addressed, but the tool's name and purpose imply it returns posts; for a low-complexity search task, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 5 parameters with descriptions (100% coverage), so the description doesn't need to explain them. The description's mention of 'keyword' aligns with the query parameter but adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool uses Facebook's in-group search to find posts matching a query inside one group. The phrase 'inside one group' differentiates it from global search tools like search_facebook and search_groups, and the comparison to 'scrolling the whole feed' sets it apart from browse_feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: 'Much cheaper than scrolling the whole feed when you already know the keyword' tells the agent when to use this tool (known keyword for a single group) and that it's cheaper than browsing. It does not name explicit alternative tools, but the scope and situation are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pagesSearch Facebook PagesARead-only
Find Facebook Pages matching a query. Returns name, URL, category, follower label and verification badge. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | What to search for, exactly as you would type it into Facebook search | |
| location | No | Optional place to bias the search, e.g. "UK" or "Manchester". Facebook web search has no structured location filter, so this is appended to the query text. | |
| scroll_rounds | No | How many times to scroll for more results. Each round costs a few seconds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and destructiveHint, and the description reiterates 'Read-only'. It adds the return fields, which is useful behavioral context, but does not disclose pagination behavior or rate limits. Given the annotations, this is moderate added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loading the core purpose. Every word earns its place; the only redundancy ('Read-only') reinforces the annotation without bloating it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters fully covered by the schema and no output schema, the description compensates by listing return fields. It is mostly complete, but lacks guidance on alternatives and edge-case behaviors, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 4 parameters have full descriptions in the schema (100% coverage), so the description does not need to explain them. The description adds no additional parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Find Facebook Pages') and lists the returned fields (name, URL, category, follower label, verification badge). It clearly distinguishes from sibling tools like search_groups by targeting Pages specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: this tool is for searching Facebook Pages. However, it does not explicitly mention alternatives or state when not to use it (e.g., vs search_facebook), so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
selector_healthcheckSelector health checkARead-only
Report which Facebook DOM strategies have been matching, and which have fallen back to a lower-tier candidate or missed entirely. A degraded strategy is the early warning that Facebook changed its markup — it means extraction still works but is running on a more brittle fallback.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds no contradiction. It goes beyond annotations by explaining the significance of a degraded strategy and clarifying that the tool reports fallback/missed statuses, which is useful behavioral context for interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, directly states the tool's purpose in the first sentence, and adds a concise explanatory note in the second. Every word earns its place; there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-parameter diagnostic tool with no output schema, the description is complete: it defines what is reported, the meaning of different statuses, and the significance for users. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, and it appropriately focuses on behavioral output rather than input details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it reports which Facebook DOM strategies have been matching, fallen back, or missed. This is a specific verb ('Report') with a clear resource ('Facebook DOM strategies') and scope (matching/fallback/missed), distinguishing it from sibling tools that perform actions like reading, posting, or searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: as an early warning for Facebook markup changes. It explains that a degraded strategy indicates extraction works but on a brittle fallback. It does not explicitly name alternative tools or state when not to use it, but the context is strong enough to guide the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
v0.1.0- First observed
browse_feed - First observed
cancel_action - First observed
check_facebook_session - First observed
confirm_action - First observed
create_post - First observed
debug_page_structure - First observed
draft_comment - First observed
find_relevant_posts - First observed
get_post_details - First observed
list_pending_actions - First observed
open_facebook_login - First observed
open_group - First observed
open_page - First observed
open_post - First observed
post_comment - First observed
react_to_post - First observed
read_comments - First observed
read_post - First observed
search_facebook - First observed
search_groups - First observed
search_in_group - First observed
search_pages - First observed
selector_healthcheck - First observed
share_post
TDQS
Scored across 24 tools
read_post and open_post are explicitly documented as identical, creating a clear ambiguity. get_post_details and draft_comment also overlap in fetching post content and comments, making it difficult to choose the right tool at a glance.
Names mix styles: verb_noun (open_group, create_post), preposition phrases (react_to_post, search_in_group), and noun-like names (selector_healthcheck, browse_feed). Some have inconsistent prefixing (open_facebook_login vs check_facebook_session). No uniform convention is applied.
24 tools is at the high end of the acceptable range for a feature-rich Facebook client, but the presence of redundant tools (read_post/open_post) and overlapping fetch-comment tools inflates the count. A tighter set could achieve the same functionality with fewer entries.
The tool set covers the core Facebook read and write workflows comprehensively, including staged approvals and session management. Missing operations like editing or deleting posts/comments are minor gaps given the read-heavy focus and safety-conscious write design.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
- MysocialOAuthio.mysocial
Social media MCP server: your Instagram, TikTok, YouTube, LinkedIn and Threads history for your AI.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAn MCP server that lets Claude operate your real computer by moving the actual mouse, clicking, typing, and reading the actual screen, working with your own logged-in sessions in any application.MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server with 206+ tools across 16 integrations that gives Claude access to real accounts (LinkedIn, Twitter, Slack, Gmail, WhatsApp, etc.) by extracting auth tokens straight from your browser, no API keys or OAuth needed.83MIT
- AlicenseAqualityBmaintenanceA local MCP server that lets Claude post to social media via upload-post.com — text, photos, and videos across 13 platforms.17MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that gives Claude a real, persistent Chrome browser with logged-in sessions, enabling automation of sites that block headless browsers. It supports 50+ tools, cross-session knowledge, and recipe replay for complex workflows.-