haraj-mcp
The haraj-mcp server is an MCP tool server that lets AI agents browse, search, and interact with the Saudi classifieds site haraj.com.sa in real time.
Discover trending content: Get trending keywords, search-box autocomplete suggestions, related tags with city counts, and live shopping streams.
Browse feeds and search listings: Fetch tag-based feeds with pagination, search by keyword with filters (cities, tags, date range, geo-location, image/video), and view promoted posts or seller lists.
Inspect post details: Retrieve full post info and similar posts, like/comment data, contact details, and Locker shipping eligibility/price.
Interact with users: View user profiles, check/follow users, and get @-mention suggestions.
Manage account features: Read notifications, view escrow buy requests, check tag-follow status, and verify stored JWT credentials.
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., "@haraj-mcpwhat's trending on haraj today?"
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.
haraj-mcp
A Model Context Protocol (MCP) server for haraj.com.sa — the largest classified-ads marketplace in Saudi Arabia.
This server exposes 21 tools to any MCP-aware agent (Claude Desktop, Cursor, opencode, Zed, etc.) so it can search and fetch marketplace listings in real time, no copy-paste of curl commands required.
All tools mirror the real haraj.com.sa operations captured from a live browser session (2026-08-17). No hallucinated filters — every argument matches what the live front end actually sends in its GraphQL calls.
Claude Desktop / Cursor / opencode
│
│ MCP (JSON-RPC over stdio)
▼
┌──────────────┐
│ haraj-mcp │ ── HTTPS ──▶ graphql.haraj.com.sa
│ (Python) │ + livestream.haraj.com.sa
└──────────────┘Tools exposed (21)
Discovery
Tool | Purpose |
| Top trending search terms (default 7 days) |
| Live search-box autocomplete (top 10) |
| Cities-with-counts for a given tag |
| Currently-open haraj live shopping streams |
Feed / search
Tool | Purpose |
| Tag-based feed (homepage + category pages). |
| Keyword search. |
| Promoted-post carousel for a tag |
| Sellers per tag (real estate etc.) |
Post detail
Tool | Purpose |
| Post + 3 related groups (via the real |
|
|
| Comment list |
|
|
|
|
User
Tool | Purpose |
| Full profile (rating, followers, location history, badges) |
| bool |
| Mutation: toggles follow |
| For @-mentions |
Account
Tool | Purpose |
| Notifications (the bell icon) |
| "Buy with confidence" escrow history |
| bool |
| Verify |
For fetch_feed, promoted_posts, and search, pass full=True to get the entire Post object instead of a compact summary. The compact summary has these keys:
{
"id": 185926519,
"title": "...",
"price_sar": 650.0,
"price_display": "650 SAR",
"url": "https://haraj.com.sa/...",
"city": "الشرقيه",
"geo_city": "الدمام",
"post_date": 1785729404,
"has_image": true,
"image_count": 3,
"thumb_urls": [
"https://mimg6cdn.haraj.com.sa/.../a.jpg",
"https://mimg6cdn.haraj.com.sa/.../b.jpg",
"https://mimg6cdn.haraj.com.sa/.../c.jpg"
],
"tags": ["شاشات", "..."],
"has_price": true
}The compact result includes up to 3 image URLs (thumb_urls). Pass any of those URLs to your vision tool to view the post's photos. For posts with more than 3 images, the rest are in the full Post object (full=True) or in get_post_details(post_id) — image_count tells you the total.
Related MCP server: opensooq-mcp
Install
cd /mnt/W/Desktop/Software/haraj-mcp
pip install -e .This installs the haraj-mcp console script on your PATH.
Configure auth
cp .env.example .env
# Edit .env and paste your HARAJ_JWT and LAST_REQUEST_ID.How to get fresh values (they expire every ~10 days):
Open https://haraj.com.sa in Chrome and log in.
F12 → Network tab → click any
graphql.haraj.com.sarequest.In Headers, copy
authorization(starts withBearer eyJ…) andlastRequestId.Paste into
.envand restart the MCP server.
You can verify with check_auth — it returns the JWT's exp claim and seconds_remaining.
Wire into your MCP client
opencode / Claude Desktop / Cursor
Add this to your client's MCP config (usually ~/.config/opencode/opencode.json, ~/Library/Application Support/Claude/claude_desktop_config.json, or ~/.cursor/mcp.json):
{
"mcpServers": {
"haraj": {
"command": "haraj-mcp",
"cwd": "/mnt/W/Desktop/Software/haraj-mcp"
}
}
}The server reads .env from cwd, so secrets stay in the project directory and don't leak into your MCP client config.
Custom .env location
Set HARAJ_MCP_ENV=/path/to/.env in the env block of the MCP config.
Example agent prompts
Once wired in, your agent can answer:
"What's trending on haraj today?"
"Fetch the latest 20 posts in
حراج السيارات(the cars category)."
"Search haraj for
RTX 4090in the last week (during_date=1week)."
"Get the seller's profile and all their current listings for post_id=185354313."
"What shipping fee do I pay if I buy this post via Locker?"
"What are people typing in the search box after
شاشة?"
"List all open live shopping streams right now."
Run without an MCP client (debug)
Pipe JSON-RPC messages directly into the server:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0"}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_regions","arguments":{}}}' | python -m haraj_mcpTests
python tests/test_smoke.py10 tests cover: tool registration (21 tools), live version URL, sec-ch-ua-platform-version header, initalChars typo preservation, real search variables, compact serializer shape, JWT validation (valid/expired/malformed), check_auth error handling, and a full stdio end-to-end test.
Agent guide
For a per-tool "what is this used for" reference (and example agent workflows), see docs/AGENT_GUIDE.md. It explains:
The 21 tools organized by use case (discovery, feed/search, post detail, user, account)
Common multi-step workflows (e.g. "find me a deal on an RTX 4090" → 5 chained tool calls)
Pagination cheatsheet (which tools use which cursor)
Privacy / safety notes (which tools return sensitive data like IBANs and mobile numbers)
Conversation snippets showing the agent calling tools
Share docs/AGENT_GUIDE.md with the LLM client (or use it as a reference when writing system prompts).
Project structure
haraj-mcp/
├── pyproject.toml
├── README.md
├── .env.example
├── src/haraj_mcp/
│ ├── __init__.py
│ ├── __main__.py # entry point: `python -m haraj_mcp`
│ ├── server.py # FastMCP setup, 21 tool registrations
│ ├── tools.py # the 21 tool implementations
│ └── auth.py # .env reader + JWT validation
├── haraj/ # GraphQL client (captured from live haraj.com.sa)
│ ├── client.py
│ ├── models.py
│ ├── queries.py # 20 exact-captured query strings
│ ├── constants.py
│ ├── auth.py
│ └── images.py
└── tests/test_smoke.pyWhat changed in v0.2.0
v0.1.0 had 4 tools (search_haraj, get_post, list_regions, check_auth) that I had hallucinated from the live GraphQL schema — many of the supported filters were never used by the real site.
v0.2.0 replaces them with 21 tools that mirror the actual operations haraj.com.sa uses. Captured from a real browser session on 2026-08-17 (219 requests, 173 GraphQL POSTs). The key fixes:
searchno longer has hallucinated filters (carExtraInfo,priceRange,userLocation,notTag,authorUsername); only the variables the live site actually sends (search,cities,city,tag,tags,page,limit,onlyWithImage,onlyWithVideo,hideShowRooms,orderByPostId,duringDate,near)searchSuggestpreserves the live wire's typoinitalChars(the server requires it)The
versionURL param bumped to2026-08-11 22(was2026-08-03 15)Added
sec-ch-ua-platform-versionheader (sent on every live call)ViewOptionshasmustLoginToView(only present onpostsop)New
live_streamstool for the non-GraphQLlivestream.haraj.com.saendpointget_post_detailsnow uses the propersimilarPosts(id:)endpoint (not the ID-as-keyword hack)
What changed in v0.3.0
Compact post results now include up to 3 image URLs (thumb_urls) plus an image_count field. The agent can pass any of those URLs to its vision tool to view the post's photos. For posts with more than 3 images, the rest are available via full=True (entire Post object) or get_post_details(post_id). The cap of 3 keeps the listing response small (a typical photo is 200-500 KB; 3 URLs ≈ 1-2 KB of metadata).
Available Tools
21 toolscheck_authA
Verify the JWT and lastRequestId in .env are still valid. Returns {ok, expires_at, seconds_remaining, user_id} or {ok: false, error} if the JWT is missing or expired.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It clearly states the return format for both success ({ok, expires_at, seconds_remaining, user_id}) and failure ({ok: false, error}) cases and specifies the condition that triggers failure (missing or expired JWT). It does not mention side effects, but this is a read-only verification operation by nature.
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, well-structured sentence that front-loads the action and resource, then states the return contract. Every word earns its place with no redundancy or 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 simplicity, zero parameters, and no output schema, the description provides sufficient detail: it explains the verification target and the exact return shape in both success and error scenarios. It could add guidance on what to do when ok is false, but that is not strictly necessary for invoking the tool correctly.
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 carries no semantics. The description correctly focuses on behavior and return values, which is all that is needed. Baseline 4 applies for a zero-parameter tool.
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 ('Verify') and names the exact resources (JWT and lastRequestId in .env). It clearly distinguishes this tool from all 21 siblings, none of which relate to authentication, making its role unambiguous.
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 tool should be used to check whether authentication is still valid, but it never explicitly states when to call it, e.g., as a preflight before authenticated requests, or what to do if the JWT is expired. No alternatives are mentioned, though no sibling auth tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commentsA
Comment list for a post. Required: post_id. Optional: page, oldest_first (default true).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| post_id | Yes | ||
| oldest_first | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that this is a read-style list operation and notes the page and oldest_first options, which is useful. It does not cover response shape, pagination size, or any side effects, so it is adequate but not rich.
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?
A single sentence packs the purpose and all parameter guidance with no filler. The required parameter is front-loaded before the optional ones.
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 list tool with three parameters and no output schema, the description gives the critical input requirements. It is missing return-value details and any pagination semantics, but the tool's low complexity makes the omission moderate rather than severe.
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 0%, so the description needed to explain the parameters, but it mostly restates the schema: post_id required, page optional, oldest_first default true. It adds no meaning about page indexing, page size, or what oldest_first ordering means beyond the parameter name.
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: 'Comment list for a post.' It clearly identifies the operation and target resource. It does not explicitly distinguish it from siblings like get_post_details or notes, so it misses the top score.
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 context is clear: this tool is for retrieving comments on a post, and the required post_id is explicitly stated. There are no exclusions or alternatives mentioned, but the intended use case is evident from the one-line context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_feedA
Fetch the post feed for a tag (the homepage + category pages). Required: tag (Arabic category name like 'حراج السيارات' or 'حراج الأجهزة'). Optional: city (Arabic region like 'الشرقيه'), cities (list of regions), page (default 0), limit (default 21), before_update_date (Unix seconds cursor — pass the last item's updateDate to get the next page), only_with_image (default true), only_with_video (default false), order_main_by_post_id (default false), full (return full Post objects, default false = compact). Returns {count, has_next_page, view_options, posts}.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| city | No | ||
| full | No | ||
| page | No | ||
| limit | No | ||
| cities | No | ||
| only_with_image | No | ||
| only_with_video | No | ||
| before_update_date | No | ||
| order_main_by_post_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does a lot: it discloses defaults, compact vs full post objects, the before_update_date cursor mechanism, and the response shape. It doesn't mention auth or rate limits, but for a fetch operation this is still substantial behavioral disclosure.
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-loads purpose, then groups required and optional parameters and return shape. Everything present is useful, and the detail is justified by ten parameters.
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 no annotations, no output schema, and heavy parameter complexity, the description is complete enough to invoke correctly: it explains the parameter set, defaults, pagination, and the returned object structure. No critical calling information appears 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 0%, but the description compensates fully by explaining all ten parameters, including data format (tag and city examples in Arabic), defaults, and the cursor semantics for pagination. This is far beyond what the raw schema 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 opens with a specific verb and resource: 'Fetch the post feed for a tag,' and clarifies scope as 'homepage + category pages.' This is precise and distinct from sibling tools like get_post_details or search, even without naming them.
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 says the tool fetches a tag feed and gives required/optional parameter guidance, including Arabic examples and defaults. It doesn't explicitly name alternatives or exclusions, but an agent can determine when to use it from the stated purpose and parameter instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
follow_userC
Follow (or unfollow) a user. Required: username. Returns the new is_following state.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal that the tool can follow or unfollow and that it returns the new state, but it fails to explain what determines whether the action is a follow or an unfollow, whether the operation is idempotent, or what permissions are required.
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 very short and front-loaded with the main action. The only minor redundancy is 'Required: username,' which duplicates the schema's required field, but overall there is little wasted text.
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 mutation tool with no annotations and no output schema, the description does not fully explain the tool's behavior. The ambiguous 'or unfollow' behavior and the lack of any indication of prerequisites, errors, or return semantics beyond the state value leave notable gaps for an agent deciding to invoke it.
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 0%, so the description should compensate, but it only repeats that username is required, which the schema already states. It adds no detail about username format, whether it is a handle or ID, case sensitivity, or how it relates to the user resource.
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 a specific action ('Follow (or unfollow)') on a specific resource ('a user') and adds that it returns the new is_following state. It is distinct from the sibling is_following_user, though it does not explicitly name that alternative. The 'or unfollow' wording introduces some ambiguity about when each behavior occurs, but the core purpose is understandable.
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 no guidance on when to use this tool versus alternatives, such as is_following_user for checking follow state. It only restates that username is required. An agent would have to infer usage context from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_post_detailsA
Fetch a post + 3 related groups (similar posts in the same tag/city, similar images, related offers). This is the canonical 'fetch by id' — there is no direct getById operation in the GraphQL API. Required: post_id. full (default true = full similarPosts response).
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| post_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It communicates a read-only fetch operation, explains the full response structure (post plus three related groups), and clarifies that the 'full' parameter controls the detail level of similarPosts. It does not discuss auth, rate limits, or error behavior, but it is reasonably transparent for a read operation.
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 compact: two sentences front-loaded with the action, then the essential API context and parameter notes. Every sentence earns its place, with no filler or repetition of the schema.
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 helpfully enumerates the return groups, which is essential for an agent to use the result. It also provides the important API context that this is the canonical fetch-by-id replacement. It could be more complete about related-tool routing or pagination details, but it is sufficient for a 2-parameter read 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 0%, so the description must compensate, and it does. It clearly identifies post_id as required and explains the meaning of 'full' as controlling the similarPosts response size. The schema already supplies the types, so the description adds the behavioral meaning needed for correct invocation.
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 specific verb and resource: 'Fetch a post + 3 related groups,' and it enumerates the exact related-group categories. It also distinguishes itself as 'the canonical fetch by id' and explicitly notes there is no direct getById operation, which separates it from search and other sibling tools.
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 clear usage context by framing this as the canonical fetch-by-id tool and noting the absence of a direct getById in the GraphQL API. It states the required input, post_id, but does not explicitly name sibling tools that should be used for alternate purposes such as search or comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_following_tagA
True/false whether the authenticated user follows tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| city | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It does disclose the core behavior: it is a read-style predicate returning true/false based on the authenticated user's follow status. It does not explicitly state that it is read-only, mention auth failure behavior, or describe edge cases, but for such a simple check the essential behavior is conveyed.
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 sentence with no filler. It is front-loaded and every word contributes to the meaning. The level of detail is appropriate for a simple boolean-check tool.
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 the tool's low complexity, the description is incomplete because the `city` parameter is undocumented, there is no output schema to rely on, and no behavior is described beyond the boolean result. The description does not fully prepare an agent to handle all valid inputs or know what context affects the answer.
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 0%, so the description must clarify parameters. It only gives meaning to `tag`; the optional `city` parameter is not mentioned or explained at all. An agent cannot tell whether `city` affects the follow check, filters results, or is irrelevant, which is a significant gap.
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 returns a boolean indicating whether the authenticated user follows a specific `tag`. It names the exact resource being checked (tag) and therefore differentiates itself from the sibling `is_following_user` without needing to open the schema.
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 intended use is implied: call this tool when you need to know whether the authenticated user follows a tag. However, the description provides no explicit guidance about when not to use it or how it compares to alternatives like `is_following_user`, `follow_user`, or `related_tags`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_following_userA
True/false whether the authenticated user follows username.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It conveys a boolean read-style check and references the authenticated user, but it does not specify behavior for unauthenticated calls, invalid usernames, or errors.
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?
A single concise sentence that defines the exact return condition. No filler, no unnecessary detail.
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 one-parameter boolean check with no output schema, the description states the subject, the target, and the returned result. Nothing critical is missing for selecting and invoking the 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?
The schema only documents username as a string with no description, so the description's use of `username` does not add much meaning. Still, the single parameter is self-explanatory and the description clarifies its role as the follow target, which provides modest 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 names a precise predicate: whether the authenticated user follows the given username. This clearly distinguishes it from the sibling is_following_tag (tag follows) and follow_user (writes a follow relationship).
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 the check is for a user follow relationship and is read-only, which hints at when to use it. However, it does not explicitly state when not to use it or mention alternatives such as is_following_tag or follow_user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
live_streamsA
Currently-open haraj live shopping streams. Non-GraphQL REST endpoint. Returns [{id, title, cover_url, streamer, num_messages, num_viewers, started_at}]. limit (default 40; the server caps it).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It discloses the endpoint style ('Non-GraphQL REST endpoint'), the exact return shape, and a server-enforced cap on limit. It does not discuss auth, rate limits, or pagination, but for a simple read-style list those are minor gaps.
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 deliver resource, endpoint type, return shape, and parameter behavior with no filler. The most identifying information is front-loaded.
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?
This is a low-complexity, single-optional-parameter tool with no output schema, so the description's inclusion of the full response array and limit behavior is nearly complete. Missing auth/pagination details are minor for a simple live-stream listing endpoint.
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 0%, so the description must explain the only parameter. It does: 'limit (default 40; the server caps it)' adds both the default and a behavioral caveat beyond the schema. It could be more explicit that limit means the maximum number of returned streams.
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 resource ('live shopping streams') and the selection criterion ('currently-open'), and lists the returned fields. It is distinguishable from the sibling feed/search tools by its unique subject, though it does not explicitly contrast itself with any sibling.
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?
There is no explicit 'when to use' or alternative routing, but the phrase 'currently-open' implies this is for fetching open live streams rather than historical or search results. It does not name alternatives or exclusions, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
locker_shipment_offerB
{offerId, isEligible, price} for a post's Locker shipping option. Required: post_id.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full transparency burden. It communicates the core behavior: given a post_id, it returns an offer object with eligibility and price fields, implying a read-only lookup. However, it does not mention auth requirements, error behavior, or any side effects, leaving those traits undisclosed.
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 with no filler: the first front-loads the return payload and purpose, the second states the required input. It is appropriately concise for a one-parameter tool.
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 one-parameter lookup, the description plus schema is enough to invoke it: pass post_id and expect an offer object. Gaps remain in usage guidance and behavioral details (auth/errors), so it is adequate but not comprehensive.
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 0%, so the description should compensate for the undocumented post_id parameter. It only repeats that post_id is required—already in the schema—and adds no format, source, or meaning beyond 'a post's.' This is minimal compensation.
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 identifies a concrete resource (a post's Locker shipping option) and specifies the returned fields (offerId, isEligible, price), which distinguishes it from siblings such as get_post_details. It lacks an explicit verb like 'get' or 'retrieve', but the output-shape notation makes the retrieval purpose clear.
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 phrase 'for a post's Locker shipping option' implies the tool should be used when an agent needs Locker shipping offer data for a given post. It does not explicitly contrast with sibling tools or state when not to use it, so the guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notesC
User notifications (the bell icon). set_read (default false) marks them as read on the server.
| Name | Required | Description | Default |
|---|---|---|---|
| set_read | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It does reveal that the set_read parameter marks notifications as read on the server, but it omits the tool's default behavior, whether it is otherwise read-only, any side effects, and what the caller should expect in 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?
The text is short and front-loads the resource, but it is written as sentence fragments and lacks a clear main clause. It is concise but structurally under-specified, and the 'bell icon' detail is marginal.
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 no output schema, no annotations, and a low-complexity single-parameter tool, the description should at least state the core operation and expected outcome. It identifies the domain and explains one parameter, but it fails to say what the tool actually returns or why an agent should call it, making it insufficient for confident invocation.
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 0%, so the description must compensate. It does add meaning to set_read by explaining that it marks notifications as read on the server, which goes beyond the raw boolean type and title. However, it does not explicitly state the behavior when set_read is true versus false, leaving some ambiguity.
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 identifies the resource as 'User notifications (the bell icon)' and hints at server-side read marking, but it never states the actual verb — it does not say the tool retrieves, lists, or fetches notifications. This makes the core purpose vague and leaves it undistinguished from siblings like fetch_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?
There is no guidance about when to use this tool versus alternatives. The description only explains a parameter's effect and never mentions contexts, exclusions, or sibling tools that might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outgoing_buy_requestsC
'Buy with confidence' (وساطة) escrow requests the user has placed. Optional: page (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It does not state whether the operation is read-only, whether results are paginated beyond the existence of a page parameter, what order results are returned in, or whether authorization is required. The description identifies the resource but not the behavior surrounding it.
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 short and front-loaded with the domain context, followed by the parameter note. There is no filler or redundant phrasing. It is concise enough to scan quickly, though additional behavioral context would have made it more useful.
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 list-style tool with one optional parameter, the description is minimally adequate: it identifies the resource and mentions pagination. However, with no output schema and no annotations, it does not explain the return shape, auth requirements, or pagination semantics such as page size or zero-indexing.
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 0%, so the description should compensate for the schema's lack of explanation. However, saying 'Optional: page (default 0)' merely restates what the schema already shows via default: 0 and the absence of required fields. It does not explain what page represents, how pagination works, or what values are valid.
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 resource: escrow ('Buy with confidence') buy requests that the user has placed. The word 'outgoing' in the tool name and 'the user has placed' in the description make the scoping evident, though no explicit verb like 'list' or 'retrieve' is used. It does not explicitly differentiate from siblings, but the domain-specific resource is distinct enough.
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?
There is no guidance on when to use this tool versus alternatives like search, user, or sellers_list. It also omits prerequisites such as authentication, which would be relevant especially since check_auth is a sibling. The only usage hint is the optional page parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_contactD
{contactText, contactMobile, shouldEnableWhatsApp} for a post. Required: post_id.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects, permissions, or return behavior. It discloses none of these; it only names input fields and a required parameter. The mention of fields absent from the schema adds confusion rather than behavioral clarity.
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 text is brief, but brevity is not conciseness when it omits essential information. The structure front-loads parameter-like fragments and a fragment 'for a post,' which is confusing rather than 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?
The tool has one parameter, no annotations, no output schema, and no behavioral explanation. The description provides almost no context about the operation, its effects, or its inputs, making it impossible for an agent to invoke it correctly with confidence.
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 0%, and the description fails to clarify the meaning of post_id beyond the schema's own title. Worse, it references contactText, contactMobile, and shouldEnableWhatsApp, which do not exist in the input schema, actively misleading an agent about the parameters it can pass.
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 lists fields ({contactText, contactMobile, shouldEnableWhatsApp}) and says 'for a post,' but never states an explicit action verb like 'create' or 'update.' It reads more like a fragment than a purpose statement, leaving the tool's actual behavior ambiguous.
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?
There is no guidance on when to use this tool versus any alternative. The only hint is 'Required: post_id,' which is input syntax, not usage context. No sibling tools or exclusions are referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_like_infoC
{is_like, total, is_following} for a post. Required: post_id.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior, but it only lists output field names. It does not state whether the tool reads data, requires authentication, has side effects, or what 'is_following' actually refers to (e.g., following the post author). No rate limits, error behavior, or safety profile is mentioned.
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 very brief, but the second sentence is redundant with the schema. The only substantive content is the output-field list at the start; the rest adds no new information and is arguably 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?
For a simple one-parameter tool, this is minimal but insufficient. It lacks an explicit verb, clarification of ambiguous output fields, and any authentication or edge-case context. An agent could guess it is a read-only like/follow check, but the description does not confirm this.
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 has 0% description coverage, so the description must compensate. It does not: 'Required: post_id' duplicates the schema's required array and does not explain the meaning of post_id, valid values, or how it filters the result.
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 states the tool returns three named fields ('is_like, total, is_following') for a post, making it clear this is a post-status query. It is distinct from sibling tools like is_following_user or is_following_tag because it targets a post's like/follow state, though this is not made explicit.
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 no guidance on when to use this tool over alternatives. The only additional note, 'Required: post_id,' merely repeats schema information and does not explain context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promoted_postsB
Fetch the promoted-post carousel for a tag. Required: tag. Optional: city. Returns {count, posts}.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| city | No | ||
| full | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the return shape ('Returns {count, posts}') and implies a read-only operation via 'Fetch,' but it does not explain what the 'full' parameter changes, pagination behavior, or any authorization requirements.
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 efficient sentence with three front-loaded clauses: action, required/optional parameters, and return shape. There is no filler or redundant wording.
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 annotations and no output schema, the description leaves a meaningful gap: the 'full' parameter is never explained, which could affect how an agent invokes the tool. There is also no mention of what 'city' filters or how results are ordered.
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 0%, so the description must compensate. It identifies tag as required and city as optional, but it restates what the schema already encodes via required/default. It omits the 'full' boolean entirely and does not clarify the semantic role of 'city' or 'full' beyond their names.
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 a specific resource ('promoted-post carousel for a tag'), which clearly distinguishes this from sibling tools like fetch_feed or search. It also states the required scope parameter, leaving no ambiguity about what the tool returns.
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?
There is no guidance about when to use this tool instead of alternatives such as fetch_feed, related_tags, or search. The description only mentions required/optional parameters, which is operational detail, not usage criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search haraj by keyword. Required: keyword. Optional: cities (list), city, tag, tags (list), page, limit, only_with_image (default true), only_with_video (default false), hide_show_rooms (default false), order_by_post_id (default false), during_date ('1days'|'3days'|'1week'|'1months'), near ('@lat,lon' e.g. '@26.4336,50.1116'), full (default false = compact). Returns {keyword, count, has_next_page, view_options, posts}.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| city | No | ||
| full | No | ||
| near | No | ||
| page | No | ||
| tags | No | ||
| limit | No | ||
| cities | No | ||
| keyword | Yes | ||
| during_date | No | ||
| hide_show_rooms | No | ||
| only_with_image | No | ||
| only_with_video | No | ||
| order_by_post_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the return shape as {keyword, count, has_next_page, view_options, posts}, explains that full defaults to false meaning compact, and lists important defaults like only_with_image true and only_with_video false. This provides a useful behavioral picture beyond a vague one-liner.
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 dense sentence that front-loads the action and required keyword, then provides a compact enumeration of optional parameters and the return shape. Every element carries information and there is no wasted text.
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 tool is complex: 14 parameters, no output schema, and no annotations. The description covers the required keyword, key defaults, date and near formats, and return fields, which is a solid foundation. Yet it omits the semantic distinctions between several similar parameters (city/cities, tag/tags) and does not explain what the compact vs full result shapes actually contain, leaving important context unresolved.
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?
With 0% schema description coverage, the description must compensate for the 14 parameters. It adds meaningful detail for during_date via allowed literal values, near via a format example, full via compact/ful distinction, and cities/tags as lists. However, semantics for city vs cities, tag vs tags, order_by_post_id, and hide_show_rooms are left to inference from parameter names.
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 states a specific action and resource: 'Search haraj by keyword.' It is clear that this is keyword-based search on the Haraj platform, and it identifies the one required parameter. It does not explicitly contrast with siblings like search_suggest or trending_keywords, so it earns 4 rather than 5.
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 required and optional parameters, but does not explain when to use this tool versus alternatives such as search_suggest, fetch_feed, or trending_keywords. No explicit exclusions or decision rules are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_suggestA
Live search-box autocomplete. Returns the top 10 suggestions for a typed prefix. Required: prefix (e.g. 'شاشة'). Optional: tag.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| prefix | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states that the tool returns the top 10 suggestions, is prefix-based, and is intended for a live search box, which conveys read-only, response-shaping behavior. It does not explain tag filtering effects or rate-limit/auth behavior, but those are secondary for a simple suggestion endpoint.
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 short sentences front-load the core behavior and follow with parameter requirements. There is no filler 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 simple two-parameter tool with no output schema, the description covers the main purpose, the prefix semantics, the result count, and required vs optional inputs. The only meaningful gap is the meaning of the optional 'tag' parameter, so it is nearly 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 0%, so the description must compensate. It meaningfully clarifies 'prefix' (a typed prefix with a concrete example) and marks 'tag' as optional, but it never explains what 'tag' does or how it affects suggestions, leaving one of two parameters under-specified.
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 and resource: it 'returns the top 10 suggestions for a typed prefix' and labels itself as live search-box autocomplete. This clearly separates it from a full search tool like the sibling 'search' or 'user_mention_suggestions'.
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 phrase 'live search-box autocomplete' gives a clear context for when to call it, and the required/optional parameter note guides invocation. It does not explicitly name alternatives or exclusions, so it stops 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.
sellers_listB
Sellers for a tag (used by real-estate / business / investment pages). Required: tags (list of Arabic tag names).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| tags | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose a genuinely important constraint: tags must be Arabic tag names, which will change call behavior. However, it says nothing about pagination behavior, response shape, or whether the result set is exhaustive or page-limited, leaving the agent to guess at the operational contract.
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 with no filler. The core purpose is front-loaded ('Sellers for a tag'), followed by the use-case context and the one essential constraint. Slight redundancy in the 'Required:' phrasing, but it reads naturally and 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?
For a low-complexity tool (2 params, no output schema, no annotations), the description covers purpose, vertical context, and the key input constraint — enough for a basic call. What is missing is any mention of pagination semantics or what the response contains, which leaves a modest but real gap for an agent deciding whether this tool answers its query.
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 0%, so the description must compensate. It adds the critical Arabic-language constraint for the required 'tags' parameter, which is non-inferable from the schema alone. However, it says nothing about the 'page' parameter (integer with default 0), and the 'Required:' phrasing duplicates structured schema information rather than adding 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 conveys the resource (sellers) and the filter dimension (tag) in a concise phrase, and the parenthetical 'used by real-estate / business / investment pages' adds scope context. It lacks an explicit verb like 'List' or 'Fetch', so the operation is implied rather than stated, but the resource-and-key pairing is specific enough to distinguish it from sibling tools like related_tags (which operates on tags themselves) and user (which is a single-user lookup).
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 'used by real-estate / business / investment pages' phrase provides an implicit usage signal: this tool is for seller discovery within those verticals. However, there is no explicit 'use when...' guidance and no mention of alternatives such as search or related_tags, so an agent must infer when this is the right tool rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_keywordsA
Top trending search terms over the last N days. range_in_days (default 7). Returns [{keyword, score}].
| Name | Required | Description | Default |
|---|---|---|---|
| range_in_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return shape and the parameter default, but does not explicitly state read-only behavior, ordering, limits, or authentication requirements. For a simple query tool, this is adequate but minimal.
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 extremely concise, using three short sentences to convey the core purpose, the parameter, and the return format. There is no redundancy or 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?
For a tool with one optional parameter and no output schema, the description covers the essential aspects: what it returns, the parameter meaning, the default, and the output element shape. It omits specifics like result count or sort order, but those are not critical for a simple trending endpoint.
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 provides only the type and default for range_in_days. The description adds meaningful semantic context by explaining it as the number of days over which the trend is computed and repeating the default, compensating for the 0% schema description 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 clearly identifies the resource (top trending search terms) and the output format ({keyword, score}). It distinguishes from siblings like search and search_suggest by the word 'trending', though it opens with a noun phrase rather than an explicit verb.
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 context is clear: use this tool to retrieve trending search terms over a configurable number of days. It does not explicitly name alternatives or exclusions, but the sibling list contains obviously different search-related tools, so an agent can infer when this one applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
userB
Full user profile (rating, followers, location history, badges). Pass either username (URL-encoded Arabic works) or user_id. rating_summary_only (default false) returns just the rating block.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| username | No | ||
| rating_summary_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses useful behaviors: rating_summary_only defaults to false and returns only the rating block, and URL-encoded Arabic usernames work. However, it does not mention auth requirements, failure cases, rate limits, or whether the operation is read-only, leaving gaps for a no-annotation 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 tight sentences with no filler. The main purpose is front-loaded, and the extra details about encoding and rating_summary_only are directly relevant to invoking the tool correctly.
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 tool has three optional parameters, no output schema, and no annotations. The description covers the two identification methods and the rating_summary_only flag, but it lacks usage context, error/auth information, and return-structure details beyond the field names. It is adequate for a simple profile fetch but not fully 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 0%, so the description must compensate. It explains that either username or user_id can be used, gives an encoding hint for Arabic usernames, and clarifies the default and effect of rating_summary_only. This adds meaning beyond the raw schema, though it does not specify behavior when both identifiers are supplied or the exact expected format.
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 resource: a full user profile containing rating, followers, location history, and badges. Though it lacks an explicit verb like 'get' or 'retrieve', the intent is unambiguous and it is distinct from sibling tools such as follow_user or is_following_user.
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 no guidance on when to choose this tool over alternatives. It explains how to pass identifiers but does not state the context, prerequisites, or when to prefer a sibling tool like user_mention_suggestions or follow_user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_mention_suggestionsA
Recent @-mention candidates for the comment / DM composer. Returns [{userId, username, handler}].
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It reveals that the tool returns a recent list of candidates and gives the exact item shape, but it does not mention authentication requirements, result limits, ordering, or any side-effect profile. The 'Returns' wording implies a read-only operation, but that is not stated explicitly.
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 focused sentence that communicates purpose, context, and return format with no filler. Every piece of information contributes to invoking the tool correctly.
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 tool with a simple output shape, the description is largely sufficient: it states the purpose, the usage context, and the return structure. Minor gaps remain around the meaning of 'recent', maximum result count, and authentication expectations, but none are critical for basic invocation.
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 has zero parameters and 100% schema description coverage, so there are no parameter semantics left undocumented. The description adds no parameter details, but none are needed; this is the baseline for a zero-parameter tool.
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 names a specific resource ('@-mention candidates') and a specific use context ('comment / DM composer'), and it states the return shape. This makes it clearly distinguishable from siblings like search_suggest or related_tags.
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 when to use the tool: when obtaining recent @-mention candidates for the comment or DM composer. It does not list exclusions or alternatives, but the context is clear enough for an agent to select it appropriately.
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. Dates show when Glama detected each change.
21 tool updates
v0.3.0- First observed
check_auth - First observed
comments - First observed
fetch_feed - First observed
follow_user - First observed
get_post_details - First observed
is_following_tag - First observed
is_following_user - First observed
live_streams - First observed
locker_shipment_offer - First observed
notes - First observed
outgoing_buy_requests - First observed
post_contact - First observed
post_like_info - First observed
promoted_posts - First observed
related_tags - First observed
search - First observed
search_suggest - First observed
sellers_list - First observed
trending_keywords - First observed
user - First observed
user_mention_suggestions
TDQS
Scored across 21 tools
Each tool maps to a distinct resource/action—feed vs search vs details vs comments vs user vs notifications—and even similar-sounding pairs (is_following_tag vs is_following_user, search_suggest vs user_mention_suggestions) are clearly separated by descriptions. No two tools appear to do the same job.
Most tools follow a clean snake_case verb_noun or noun_phrase pattern (fetch_feed, get_post_details, follow_user, trending_keywords). Minor deviations like bare nouns (user, comments, notes, live_streams) and search_suggest keep it from being perfectly uniform, but the pattern is still predictable.
Twenty-one tools is on the higher end of the typical range, but the Haraj domain is broad and each tool exposes a distinct endpoint or feature. A few niche tools could be trimmed, but the count feels reasonable rather than bloated for a full marketplace surface.
The set thoroughly covers browsing/searching, post details, comments, user profiles, notifications, contact, shipping, and live streams. However, it is essentially read-only for the core marketplace: there is no create/update/delete post, no like/comment write action, and no follow_tag mutation despite is_following_tag existing.
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
All HasData scraping tools in one MCP server: Google, TikTok, Instagram, maps, e-commerce and more.
One MCP server for 180+ live web-data APIs returning clean JSON from sites that block scrapers.
- LinkMCPOAuthio.linkmcp
Hosted MCP server for LinkedIn: 31 tools for profiles, search, messaging, posts, enrichment.
- Prowl MCPOAuthchat.prowl
MCP server: 447 pay-as-you-go research tools (SEO, ads, SERP) + verified prowl_analyze reports
Related MCP Servers
AlicenseBqualityAmaintenanceHosted MCP server for structured public web data — 319 tools across search, maps, commerce, social & finance, returning clean JSON.105005361MIT- AlicenseNot gradedqualityDmaintenanceA read-only MCP server that gives LLM agents live access to OpenSooq, the largest classifieds marketplace in Kuwait, enabling search, pricing, seller reputation, and deal finding.2MIT
- FlicenseNot gradedqualityDmaintenanceRemote MCP server for Saudi real estate data, giving AI assistants access to 65,000+ rental and sale property listings across 5 Saudi cities with market analytics and price trends.1-
- AlicenseNot gradedqualityAmaintenanceMCP server for the OLX.ba API that enables searching, publishing, editing, and managing listings (ads), including image handling, sponsorships, categories, locations, and user account operations through 36 tools covering all official API endpoints.165MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bibo242/Haraj-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server