Fmind Freelance AI Architect Website
Server Details
Read-only access to Fmind's portfolio, articles, and sites.
- Status
- Healthy
- Uptime
- 100.0% over 43 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- fmind/www
- GitHub Stars
- 0
TDQS
Scored across 10 tools
The two compare_* tools target clearly different things (hosting budget vs MCP context cost), and the get_/list_ tools each map to a distinct resource. The only mild overlap is between list_publications, search_articles, and get_article, but their descriptions clarify list/search/fetch roles well.
Every tool follows a clean verb_noun pattern (compare_llm_hosting, get_profile, list_certifications, search_articles). No mixing of conventions or vague verbs.
Ten tools is well within the ideal range and each earns its place, covering profile, services, credentials, work, projects, publications, articles, and two calculators.
The read-only personal-site domain is well covered end-to-end (profile, services, certifications, experience, projects, publications, article search+fetch). No obvious dead ends, though the specialized compare_* calculators are somewhat tangential and the surface is inherently read-only.
Available Tools
10 toolscompare_llm_hostingCompare LLM hosting costsARead-onlyInspect
Compare a GKE infrastructure budget with managed APIs. Call with parameters={} for defaults and supported models, hardware, and plans. Simple mode accepts preset, model, billing, requests (calls/day), and window (auto, 24, 8, or 1 hour/day); set mode=simple when overriding requests. It sizes replicas under illustrative throughput assumptions. Interactive presets run 24/7; job and pipeline presets schedule running hours inside active windows. Commitments bill idle hours. Advanced mode keeps the fleet fixed and exposes custom token budgets, throughput, and running time. Break-even holds that fleet fixed and checks its capacity. Totals include compute and GKE; operations and additional services are excluded. Returns assumptions, USD costs, constraints, sources, and a shareable URL. Invalid inputs fail; no resources are provisioned. See /agents#calculator.
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | Yes | Calculator URL parameters as strings; use an empty object for defaults and available choices. |
Output Schema
| Name | Required | Description |
|---|---|---|
| apis | Yes | |
| tasks | Yes | |
| units | Yes | |
| inputs | Yes | |
| models | Yes | |
| latency | Yes | |
| presets | Yes | |
| sources | Yes | |
| estimate | Yes | |
| node_pools | Yes | |
| parameters | Yes | |
| validation | Yes | |
| limitations | Yes | |
| scenario_url | Yes | |
| calculated_on | Yes | |
| quantizations | Yes | |
| snapshot_date | Yes | |
| comparison_ready | Yes | |
| model_comparisons | Yes | |
| pilot_configuration | Yes | |
| precision_comparisons | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds real value beyond that: 'no resources are provisioned', invalid inputs fail, idle hours are billed under commitments, and operations/additional services are excluded from totals. These are non-obvious cost-accounting behaviors the annotations cannot 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?
Purpose and the zero-arg default call are front-loaded, then mode behavior follows in a logical order. It is dense and slightly run-on in the middle, but nearly every sentence carries distinct behavioral or parameter information rather than 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?
Despite an output schema existing, the description still sketches what comes back (assumptions, USD costs, constraints, sources, shareable URL) and covers the exclusions and failure behavior. Nothing an agent needs to invoke this correctly 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 schema is a generic free-form string map, so its 100% coverage documents only the wrapper, not the actual keys. The description compensates by naming real parameters (preset, model, billing, requests, window, mode) and their allowed values ('auto, 24, 8, or 1 hour/day'), which the schema alone would not reveal.
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?
States a specific verb and resource ('Compare a GKE infrastructure budget with managed APIs') and immediately differentiates from the sibling compare_mcp_context_cost by naming the GKE-vs-managed-API scope. An agent can tell what is being compared without opening 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?
Explicitly says to call with parameters={} for defaults and available choices, when to use simple mode vs advanced mode, and how break-even differs ('holds that fleet fixed'). The window and mode interactions are spelled out, so an agent knows which mode to pick for which scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_mcp_context_costCompare MCP context costsARead-onlyInspect
Count the tool-definition tokens that measured MCP servers (GitHub default toolset, Filesystem, Memory, Playwright) add to every model request, then price them as standard input for the managed APIs in the hosting snapshot. Omit servers for all four. Returns tokens per request and month, context share and USD per 1,000 requests and per 30-day month for each model, dated sources, limitations and a shareable page URL. Reference tokens, not provider billing. See /agents#mcp-context.
| Name | Required | Description | Default |
|---|---|---|---|
| servers | No | Distinct server ids; omit for all. | |
| requests_per_day | No | Model requests per day; count every call in agent loops. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tools | Yes | |
| models | Yes | |
| servers | Yes | |
| limitations | Yes | |
| scenario_url | Yes | |
| days_per_month | Yes | |
| requests_per_day | Yes | |
| tokens_per_month | Yes | |
| prices_checked_on | Yes | |
| tokens_per_request | Yes | |
| snapshot_verified_on | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the pricing is tied to a dated 'hosting snapshot', results include dated sources and limitations, and the final caveat 'Reference tokens, not provider billing' prevents the agent from misinterpreting the USD figures as actual spend.
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?
Front-loaded with the core action and structured as a single tight paragraph, with the caveat and reference link placed at the end where they belong. It is slightly over-full in enumerating every returned field (context share, USD per 1,000 requests, per 30-day month, page URL) when an output schema already exists, which costs it a point.
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 an output schema present, the description need not explain return values, yet it still enumerates them. For a two-parameter, zero-required, read-only tool with full schema coverage, everything an agent needs to call it correctly is present, though the redundant output enumeration and the missing explicit routing to compare_llm_hosting are the only remaining soft spots.
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 both parameters are already documented in structured form. The description restates the enum-free servers default ('omit for all four'), which is already the documented default, and adds nothing about requests_per_day semantics. This is the baseline case where 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?
States a specific verb pair (count and price) applied to a precise resource: the tool-definition tokens that four named MCP servers add to each model request. It implicitly separates itself from the billing-oriented sibling (compare_llm_hosting) with 'Reference tokens, not provider billing', but never names the alternative outright, so the differentiation is inferential rather than 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 tells the agent how to parameterize the call ('Omit servers for all four') and warns that results are reference tokens rather than provider billing, which is useful context. However, it never says when to reach for this tool versus compare_llm_hosting, and no prerequisites or exclusions are given. Usage is implied by the subject matter only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_articleRead an articleARead-onlyInspect
Read a public article's complete Markdown, dates, canonical URL, and hosted section links. Use a slug from search_articles; unknown and draft articles are unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| article | Yes | |
| markdown | Yes | |
| sections | Yes | |
| canonical_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the read-only nature is already known. The description adds behavioral context by specifying what content is returned and what is not available (unknown/draft articles). No contradiction, and the added detail goes beyond the annotation.
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 the core action and content front-loaded, followed by a single usage note. No wasted words; 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 single-parameter read tool with an output schema present, the description covers what is returned, what is not available, and how to obtain the required parameter. Nothing an agent needs to call it correctly 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 0%, so the description must compensate. It explains that the slug should come from search_articles, which gives its origin, but does not define what a slug is or its format beyond the schema pattern. This is helpful but incomplete.
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?
States a specific verb ('Read') and resource ('public article') and lists the exact content returned (complete Markdown, dates, canonical URL, hosted section links). It also implicitly differentiates from sibling search_articles by instructing to get the slug from there, so an agent can tell them apart.
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?
Explicitly tells the agent to obtain a slug from search_articles, establishing the prerequisite and alternative tool. Also states that unknown and draft articles are unavailable, giving clear exclusions for when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileGet profileARead-onlyInspect
Return the core profile: identity, headline, job title, contact, socials, biography, and areas of expertise.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | |
| biography | Yes | |
| expertise | Yes | |
| leadership | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the bar is lower. The description usefully adds the scope of what is returned (the field set), but discloses nothing further about auth requirements, caching, or behavior; with an output schema present, deeper return disclosure is not 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?
A single front-loaded sentence with the verb first and the returned content enumerated; no filler sentences. The trailing field list is somewhat dense, but every element earns its place by telling the agent what the profile contains.
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?
Zero-parameter tool with full annotation coverage and an output schema, so return format and safety are already handled elsewhere. The description fully covers what an agent needs to know before calling 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?
The tool takes zero parameters, so per the baseline there is no parameter semantics to explain and the description is not deficient here. It does not need to compensate for any schema 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?
States a specific verb (Return) and resource (the core profile) and enumerates the exact contents: identity, headline, job title, contact, socials, biography, expertise. It is clearly distinguishable from list-style siblings like list_experience or get_article. It stops short of explicitly differentiating itself from sibling tools that expose overlapping sections.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as get_services or list_experience, even though an agent could reasonably wonder whether the profile overlaps with those tools. Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_servicesGet professional servicesARead-onlyInspect
List the professional services on offer (AI architecture advisory and mentoring) with availability and how to book.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| services | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, so the agent knows this is a safe read operation. The description adds meaningful behavioral scope by stating the response covers availability and how to book, without claiming any booking side effect. 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?
One tightly packed sentence front-loads the action and object ('List the professional services on offer') and follows with useful qualifiers. Every word earns its place; no filler or repetition of schema fields.
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 parameterless, read-only list tool with an existing output schema, the description covers all necessary context: what is listed, the domain of the services, and the availability/booking details. Nothing needed for correct invocation 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 input schema has zero parameters, so the baseline for this dimension is 4. The description still helps by explaining what the returned list contains (offerings, availability, booking instructions), which is the only semantic content an agent could need.
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?
States a specific verb ('List') and resource ('professional services'), and goes beyond a label by naming the exact offerings (AI architecture advisory and mentoring) plus the availability/booking details. This distinguishes it clearly from sibling tools that cover profile, certifications, experience, projects, publications, and articles.
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 makes the tool's scope obvious—services, not profile credentials or publications—so an agent can select it without overlap. It does not explicitly name alternatives or exclusion conditions, but the sibling set is distinct enough that no stronger routing guidance is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_certificationsList credentialsARead-onlyInspect
List professional certifications, badges, and course specializations with their issuers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| certifications | Yes | |
| specializations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the scope of what is listed (certifications, badges, specializations, issuers) but does not disclose details like ordering, pagination, or whether the list is exhaustive. No contradiction with annotations 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 with no filler. Every word contributes meaning, naming the action, the resource type, and an important attribute (issuers).
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 parameterless, read-only list tool with an output schema, the description is fully sufficient. An agent can select and invoke this tool correctly without needing additional behavioral or parameter details.
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%, so there is no parameter documentation burden for the description to carry. The baseline of 4 for no-parameter tools 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 uses a specific verb ('List') and a clear resource ('professional certifications, badges, and course specializations') with relevant detail about issuers. It is clearly distinguishable from sibling list tools like list_experience and list_projects because it names a distinct credential-focused resource.
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 when to use the tool: whenever an agent needs professional certifications or credentials. However, it does not explicitly state when not to use it or how it compares to alternatives such as get_profile or list_publications, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experienceList work experienceARead-onlyInspect
List professional work experience: companies, roles, descriptions, and skill tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| experience | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds the specific content returned (companies, roles, etc.), which is useful context beyond the annotation. No contradictions or missing side effects are apparent for this simple list 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?
A single sentence that states the action and the content categories without any filler. The core purpose is front-loaded, making it highly efficient for an agent to parse.
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 no parameters, an output schema is present (so return structure is covered), and the description sufficiently describes what is listed. Nothing an agent needs to invoke it correctly 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?
There are zero parameters, and schema coverage is trivially 100%. Per the baseline for zero parameters, a score of 4 is appropriate; the description adds no parameter details because none exist.
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 ('List') and resource ('professional work experience') and enumerates the returned fields (companies, roles, descriptions, skill tags). It clearly distinguishes from sibling tools like list_certifications or list_projects by naming the exact domain.
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 when work experience is needed, but it does not explicitly state when to prefer this over alternatives or mention any exclusions. The context of sibling tools makes it obvious, but no direct guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsARead-onlyInspect
List open-source projects and educational YouTube series.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| open_source | Yes | |
| youtube_series | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context such as ordering, filtering, deduplication, or scope limitations; 'open-source projects and educational YouTube series' defines content, not behavior. There is no contradiction, but the description also contributes no extra behavioral transparency.
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 clear sentence front-loaded with the verb 'List.' It contains no filler, no repetition of the tool name, and no extraneous details. Every word 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?
This is a simple, zero-parameter list tool with an existing output schema and read-only annotations. The description fully captures the semantic domain, and nothing needed to invoke the tool correctly is missing. Sibling tools are distinct enough by name for an agent to differentiate.
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 complete at 100% coverage. The rubric sets a baseline of 4 for zero-parameter tools, and the description correctly has nothing to add about parameters.
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 a specific verb 'List' plus the exact content scope: 'open-source projects and educational YouTube series.' It distinguishes itself from sibling tools like list_certifications and list_publications by naming the resource precisely. The title adds nothing beyond the description, which is appropriate.
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 its siblings such as list_publications or search_articles. The description does not express any exclusion condition or contextual trigger. Tool selection is left entirely to inference from the name and domain context, so this is a missing-guidance case rather than an implied one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_publicationsList publicationsARead-onlyInspect
List academic and written publications: the PhD thesis, peer-reviewed papers, and hosted articles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| papers | Yes | |
| thesis | Yes | |
| articles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds content-specific detail about what categories of publications are included, which goes beyond the annotation. It does not discuss sorting or pagination, but the output schema likely covers return details.
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, well-structured sentence that immediately identifies the resource and enumerates its scope. There is no wasted text or padding.
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 parameters, a clear resource scope, an output schema present, and read-only annotations, the description is complete for an agent to invoke the tool correctly. 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 takes zero parameters, so the description carries no parameter-semantics burden. The schema is empty, 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 ('List') and resource ('publications'), and enumerates the included content types (PhD thesis, peer-reviewed papers, hosted articles). This clearly distinguishes it from sibling tools like list_projects and list_certifications.
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 case is clear: list all academic and written publications of a person. No explicit exclusions or alternative tool guidance is given, but the resource scope is unambiguous against siblings such as search_articles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_articlesSearch articlesARead-onlyInspect
Search the hosted articles by relevance (BM25 over titles, tags, descriptions, and full text) and return the best matches. Use it to answer what Fmind has written about a topic instead of listing every publication.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | optionally keep only articles with this tag, case-insensitive: Agent, Coding, LLM, RAG, MLOps, Cloud, Python, Project, Demo, Guide | |
| limit | No | maximum number of results to return (default 10, maximum 50) | |
| query | Yes | words to search for across article titles, tags, descriptions, and full text |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| total | Yes | |
| articles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds meaningful behavioral detail beyond that: it reveals the ranking mechanism (BM25) and the set of fields searched, which helps an agent understand what matches and how results are ordered. 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 sentences, zero filler. The first sentence states the mechanism and behavior; the second gives the intended use case and differentiates from listing. Everything 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?
Given the simple 3-parameter schema, the presence of an output schema, and the read-only annotation, the description covers the core purpose, usage guidance, and matching behavior. It lacks only minor details like handling of empty queries or sorting edge cases, but those are not necessary for correct tool selection and 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 100%, and the schema already explains query, tag, and limit in detail, including defaults, max, and tag enum values. The description does not add new parameter-level meaning beyond restating the searchable fields, 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 states a specific action ('Search'), a specific resource ('hosted articles'), and a clear scope (BM25 over titles, tags, descriptions, and full text). It also distinguishes itself from listing every publication, which maps to a sibling tool, making its purpose unmistakable.
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 an explicit use case ('answer what Fmind has written about a topic') and an implicit alternative ('instead of listing every publication'). It does not name the sibling tool (list_publications) directly, but the guidance is clear and actionable without being vague.
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.
1 tool update
- Changed
compare_mcp_context_cost21 fields changed- removed
Input schema / properties / parametersRemoved value: -{ - "additionalProperties": { - "maxLength": 128, - "type": "string" - }, - "description": "Calculator URL parameters as strings; empty object returns defaults and bounds.", - "maxProperties": 32, - "propertyNames": { - "maxLength": 64 - }, - "title": "Parameters", - "type": "object" -} - added
Input schema / properties / requests_per_dayAdded value: +{ + "default": 1000, + "description": "Model requests per day; count every call in agent loops.", + "maximum": 10000000, + "minimum": 1, + "title": "Requests Per Day", + "type": "integer" +} - added
Input schema / properties / serversAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "github", + "filesystem", + "memory", + "playwright" + ], + "type": "string" + }, + "maxItems": 4, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Distinct server ids; omit for all.", + "title": "Servers" +} - removed
Input schema / requiredRemoved value: -[ - "parameters" -] - added
Output schema / $defs / ModelCostAdded value: +{ + "properties": { + "context_percent": { + "title": "Context Percent", + "type": "number" + }, + "input_per_million": { + "title": "Input Per Million", + "type": "number" + }, + "input_token_limit": { + "title": "Input Token Limit", + "type": "integer" + }, + "month_usd": { + "title": "Month Usd", + "type": "number" + }, + "name": { + "title": "Name", + "type": "string" + }, + "needs_review": { + "title": "Needs Review", + "type": "boolean" + }, + "per_thousand_requests_usd": { + "title": "Per Thousand Requests Usd", + "type": "number" + }, + "source_url": { + "title": "Source Url", + "type": "string" + }, + "verified_on": { + "title": "Verified On", + "type": "string" + } + }, + "required": [ + "name", + "input_per_million", + "input_token_limit", + "context_percent", + "per_thousand_requests_usd", + "month_usd", + "source_url", + "verified_on", + "needs_review" + ], + "title": "ModelCost", + "type": "object" +} - removed
Output schema / $defs / ModelSnapshotRemoved value: -{ - "properties": { - "cache_minimum": { - "title": "Cache Minimum", - "type": "integer" - }, - "cache_price": { - "title": "Cache Price", - "type": "number" - }, - "cache_url": { - "title": "Cache Url", - "type": "string" - }, - "context_tokens": { - "title": "Context Tokens", - "type": "integer" - }, - "id": { - "title": "Id", - "type": "string" - }, - "input_price": { - "title": "Input Price", - "type": "number" - }, - "model_url": { - "title": "Model Url", - "type": "string" - }, - "name": { - "title": "Name", - "type": "string" - }, - "note": { - "title": "Note", - "type": "string" - }, - "price_url": { - "title": "Price Url", - "type": "string" - }, - "verified_on": { - "title": "Verified On", - "type": "string" - }, - "write_multiplier": { - "title": "Write Multiplier", - "type": "number" - } - }, - "required": [ - "id", - "name", - "context_tokens", - "input_price", - "cache_price", - "write_multiplier", - "cache_minimum", - "verified_on", - "price_url", - "model_url", - "cache_url", - "note" - ], - "title": "ModelSnapshot", - "type": "object" -} - removed
Output schema / $defs / NumberFieldRemoved value: -{ - "properties": { - "default": { - "title": "Default", - "type": "number" - }, - "help": { - "title": "Help", - "type": "string" - }, - "key": { - "title": "Key", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - }, - "maximum": { - "title": "Maximum", - "type": "number" - }, - "minimum": { - "title": "Minimum", - "type": "number" - }, - "whole": { - "default": false, - "title": "Whole", - "type": "boolean" - } - }, - "required": [ - "key", - "label", - "default", - "minimum", - "maximum", - "help" - ], - "title": "NumberField", - "type": "object" -} - removed
Output schema / $defs / StrategyRemoved value: -{ - "properties": { - "cache_eligible": { - "title": "Cache Eligible", - "type": "boolean" - }, - "cached_average_request_usd": { - "title": "Cached Average Request Usd", - "type": "number" - }, - "cached_day_usd": { - "title": "Cached Day Usd", - "type": "number" - }, - "cached_month_usd": { - "title": "Cached Month Usd", - "type": "number" - }, - "cached_saved_month_usd": { - "title": "Cached Saved Month Usd", - "type": "number" - }, - "cached_session_usd": { - "title": "Cached Session Usd", - "type": "number" - }, - "context_percent": { - "title": "Context Percent", - "type": "number" - }, - "day_usd": { - "title": "Day Usd", - "type": "number" - }, - "fits": { - "title": "Fits", - "type": "boolean" - }, - "id": { - "title": "Id", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - }, - "month_usd": { - "title": "Month Usd", - "type": "number" - }, - "request_usd": { - "title": "Request Usd", - "type": "number" - }, - "saved_month_usd": { - "title": "Saved Month Usd", - "type": "number" - }, - "session_usd": { - "title": "Session Usd", - "type": "number" - }, - "tokens_request": { - "title": "Tokens Request", - "type": "integer" - } - }, - "required": [ - "id", - "label", - "tokens_request", - "context_percent", - "fits", - "cache_eligible", - "request_usd", - "cached_average_request_usd", - "session_usd", - "day_usd", - "month_usd", - "cached_session_usd", - "cached_day_usd", - "cached_month_usd", - "saved_month_usd", - "cached_saved_month_usd" - ], - "title": "Strategy", - "type": "object" -} - added
Output schema / properties / days_per_monthAdded value: +{ + "title": "Days Per Month", + "type": "integer" +} - removed
Output schema / properties / fieldsRemoved value: -{ - "items": { - "$ref": "#/$defs/NumberField" - }, - "title": "Fields", - "type": "array" -} - changed
Output schema / properties / models / items / $refPrevious value: -"#/$defs/ModelSnapshot"New value: +"#/$defs/ModelCost" - removed
Output schema / properties / parametersRemoved value: -{ - "additionalProperties": { - "type": "string" - }, - "title": "Parameters", - "type": "object" -} - added
Output schema / properties / prices_checked_onAdded value: +{ + "title": "Prices Checked On", + "type": "string" +} - added
Output schema / properties / requests_per_dayAdded value: +{ + "title": "Requests Per Day", + "type": "integer" +} - removed
Output schema / properties / snapshot_dateRemoved value: -{ - "title": "Snapshot Date", - "type": "string" -} - added
Output schema / properties / snapshot_verified_onAdded value: +{ + "title": "Snapshot Verified On", + "type": "string" +} - removed
Output schema / properties / strategiesRemoved value: -{ - "items": { - "$ref": "#/$defs/Strategy" - }, - "title": "Strategies", - "type": "array" -} - added
Output schema / properties / tokens_per_monthAdded value: +{ + "title": "Tokens Per Month", + "type": "integer" +} - added
Output schema / properties / tokens_per_requestAdded value: +{ + "title": "Tokens Per Request", + "type": "integer" +} - added
Output schema / properties / toolsAdded value: +{ + "title": "Tools", + "type": "integer" +} - changed
Output schema / requiredPrevious value: -[ - "scenario_url", - "parameters", - "strategies", - "servers", - "models", - "fields", - "snapshot_date", - "limitations" -]New value: +[ + "servers", + "requests_per_day", + "days_per_month", + "tools", + "tokens_per_request", + "tokens_per_month", + "models", + "scenario_url", + "snapshot_verified_on", + "prices_checked_on", + "limitations" +]
1 tool update
- Changed
get_profile2 fields changed- added
Output schema / $defs / Metadata / properties / google_analytics_idAdded value: +{ + "title": "Google Analytics Id", + "type": "string" +} - changed
Output schema / $defs / Metadata / requiredPrevious value: -[ - "name", - "alternate_name", - "site_name", - "title", - "job_title", - "headline_primary", - "headline_secondary", - "description", - "keywords", - "email", - "calendar_url", - "site_url", - "twitter_handle", - "socials", - "work_location" -]New value: +[ + "name", + "alternate_name", + "site_name", + "title", + "job_title", + "headline_primary", + "headline_secondary", + "description", + "keywords", + "email", + "calendar_url", + "site_url", + "twitter_handle", + "google_analytics_id", + "socials", + "work_location" +]
1 tool update
- Added
compare_mcp_context_cost
1 tool update
- Changed
compare_llm_hosting36 fields changed- added
Output schema / $defs / DemandPreset / properties / scheduledAdded value: +{ + "default": false, + "title": "Scheduled", + "type": "boolean" +} - added
Output schema / $defs / DemandPreset / properties / window_hoursAdded value: +{ + "default": 24, + "title": "Window Hours", + "type": "number" +} - removed
Output schema / $defs / FrontierModel / properties / analysis_urlRemoved value: -{ - "title": "Analysis Url", - "type": "string" -} - added
Output schema / $defs / FrontierModel / properties / checkpoint_memoryAdded value: +{ + "default": [], + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "title": "Checkpoint Memory", + "type": "array" +} - added
Output schema / $defs / FrontierModel / properties / checkpoint_urlsAdded value: +{ + "default": [], + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array" + }, + "title": "Checkpoint Urls", + "type": "array" +} - added
Output schema / $defs / FrontierModel / properties / default_quantizationAdded value: +{ + "default": "fp16", + "title": "Default Quantization", + "type": "string" +} - added
Output schema / $defs / FrontierModel / properties / deployment_issueAdded value: +{ + "default": "", + "title": "Deployment Issue", + "type": "string" +} - removed
Output schema / $defs / FrontierModel / properties / intelligenceRemoved value: -{ - "title": "Intelligence", - "type": "number" -} - removed
Output schema / $defs / FrontierModel / properties / minimum_node_idRemoved value: -{ - "title": "Minimum Node Id", - "type": "string" -} - removed
Output schema / $defs / FrontierModel / properties / minimum_nodesRemoved value: -{ - "title": "Minimum Nodes", - "type": "integer" -} - added
Output schema / $defs / FrontierModel / properties / node_context_limitsAdded value: +{ + "default": [], + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "type": "array" + }, + "title": "Node Context Limits", + "type": "array" +} - added
Output schema / $defs / FrontierModel / properties / node_minimumsAdded value: +{ + "default": [], + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "type": "array" + }, + "title": "Node Minimums", + "type": "array" +} - removed
Output schema / $defs / FrontierModel / properties / rankRemoved value: -{ - "title": "Rank", - "type": "integer" -} - added
Output schema / $defs / FrontierModel / properties / recipe_urlAdded value: +{ + "default": "", + "title": "Recipe Url", + "type": "string" +} - added
Output schema / $defs / FrontierModel / properties / required_node_idsAdded value: +{ + "default": [], + "items": { + "type": "string" + }, + "title": "Required Node Ids", + "type": "array" +} - added
Output schema / $defs / FrontierModel / properties / supported_quantizationsAdded value: +{ + "default": [ + "fp4", + "fp8", + "fp16" + ], + "items": { + "type": "string" + }, + "title": "Supported Quantizations", + "type": "array" +} - changed
Output schema / $defs / FrontierModel / requiredPrevious value: -[ - "id", - "rank", - "name", - "creator", - "intelligence", - "parameters_b", - "active_parameters", - "context_tokens", - "license", - "license_class", - "analysis_url", - "weights_url", - "minimum_node_id", - "minimum_nodes" -]New value: +[ + "id", + "name", + "creator", + "parameters_b", + "active_parameters", + "context_tokens", + "license", + "license_class", + "weights_url" +] - added
Output schema / $defs / HostingEstimate / properties / capacity_requests_monthAdded value: +{ + "title": "Capacity Requests Month", + "type": "integer" +} - added
Output schema / $defs / HostingEstimate / properties / compatibility_issueAdded value: +{ + "title": "Compatibility Issue", + "type": "string" +} - added
Output schema / $defs / HostingEstimate / properties / daily_demand_fitsAdded value: +{ + "title": "Daily Demand Fits", + "type": "boolean" +} - removed
Output schema / $defs / HostingEstimate / properties / platform_monthly_usdRemoved value: -{ - "title": "Platform Monthly Usd", - "type": "number" -} - added
Output schema / $defs / HostingEstimate / properties / required_output_tokens_per_secondAdded value: +{ + "title": "Required Output Tokens Per Second", + "type": "number" +} - added
Output schema / $defs / HostingEstimate / properties / usable_output_tokens_per_secondAdded value: +{ + "title": "Usable Output Tokens Per Second", + "type": "number" +} - added
Output schema / $defs / HostingEstimate / properties / window_capacity_pctAdded value: +{ + "title": "Window Capacity Pct", + "type": "number" +} - changed
Output schema / $defs / HostingEstimate / requiredPrevious value: -[ - "weight_memory_gb", - "required_memory_gb", - "nodes_per_replica", - "total_nodes", - "total_gpus", - "compute_monthly_usd", - "control_monthly_usd", - "platform_monthly_usd", - "total_monthly_usd", - "capacity_tokens_month", - "capacity_requests_day", - "requests_month", - "input_tokens_month", - "output_tokens_month", - "demand_capacity_pct", - "per_thousand_requests_usd", - "demand_fits", - "context_issue", - "topology_confirmed", - "qualified" -]New value: +[ + "weight_memory_gb", + "required_memory_gb", + "nodes_per_replica", + "total_nodes", + "total_gpus", + "compute_monthly_usd", + "control_monthly_usd", + "total_monthly_usd", + "capacity_tokens_month", + "capacity_requests_day", + "requests_month", + "input_tokens_month", + "output_tokens_month", + "demand_capacity_pct", + "window_capacity_pct", + "required_output_tokens_per_second", + "usable_output_tokens_per_second", + "capacity_requests_month", + "per_thousand_requests_usd", + "demand_fits", + "context_issue", + "topology_confirmed", + "qualified", + "compatibility_issue", + "daily_demand_fits" +] - added
Output schema / $defs / HostingInputs / properties / demand_window_hoursAdded value: +{ + "title": "Demand Window Hours", + "type": "number" +} - added
Output schema / $defs / HostingInputs / properties / modeAdded value: +{ + "default": "advanced", + "title": "Mode", + "type": "string" +} - removed
Output schema / $defs / HostingInputs / properties / platform_monthly_usdRemoved value: -{ - "title": "Platform Monthly Usd", - "type": "number" -} - added
Output schema / $defs / HostingInputs / properties / quality / itemsAdded value: +{ + "$ref": "#/$defs/TaskQuality" +} - removed
Output schema / $defs / HostingInputs / properties / quality / maxItemsRemoved value: -4 - removed
Output schema / $defs / HostingInputs / properties / quality / minItemsRemoved value: -4 - removed
Output schema / $defs / HostingInputs / properties / quality / prefixItemsRemoved value: -[ - { - "$ref": "#/$defs/TaskQuality" - }, - { - "$ref": "#/$defs/TaskQuality" - }, - { - "$ref": "#/$defs/TaskQuality" - }, - { - "$ref": "#/$defs/TaskQuality" - } -] - changed
Output schema / $defs / HostingInputs / requiredPrevious value: -[ - "model_id", - "node_pool_id", - "quantization_id", - "replicas", - "duty_cycle_percent", - "memory_overhead_pct", - "tokens_per_second", - "target_utilization", - "output_tokens_request", - "input_tokens_request", - "requests_per_day", - "active_days", - "platform_monthly_usd", - "api_mode", - "cache_prefix_tokens", - "cache_requests", - "concurrency", - "target_first_token", - "target_completion", - "measured_concurrency", - "measured_first_token", - "measured_completion", - "tasks_per_month", - "review_hourly_usd", - "quality", - "quality_enabled" -]New value: +[ + "model_id", + "node_pool_id", + "quantization_id", + "replicas", + "duty_cycle_percent", + "memory_overhead_pct", + "tokens_per_second", + "target_utilization", + "output_tokens_request", + "input_tokens_request", + "requests_per_day", + "active_days", + "demand_window_hours", + "api_mode", + "cache_prefix_tokens", + "cache_requests", + "concurrency", + "target_first_token", + "target_completion", + "measured_concurrency", + "measured_first_token", + "measured_completion", + "tasks_per_month", + "review_hourly_usd", + "quality", + "quality_enabled" +] - added
Output schema / $defs / PrecisionComparison / properties / nodeAdded value: +{ + "$ref": "#/$defs/GKENodePool" +} - added
Output schema / $defs / PrecisionComparison / properties / urlAdded value: +{ + "title": "Url", + "type": "string" +} - changed
Output schema / $defs / PrecisionComparison / requiredPrevious value: -[ - "quantization", - "estimate" -]New value: +[ + "quantization", + "estimate", + "node", + "url" +]
1 tool update
- Changed
search_articles1 field changed- added
Input schema / properties / tagAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "optionally keep only articles with this tag, case-insensitive: Agent, Coding, LLM, RAG, MLOps, Cloud, Python, Project, Demo, Guide", + "title": "Tag" +}
1 tool update
- Changed
get_profile2 fields changed- added
Output schema / $defs / Metadata / properties / work_locationAdded value: +{ + "title": "Work Location", + "type": "string" +} - changed
Output schema / $defs / Metadata / requiredPrevious value: -[ - "name", - "alternate_name", - "site_name", - "title", - "job_title", - "headline_primary", - "headline_secondary", - "description", - "keywords", - "email", - "calendar_url", - "site_url", - "twitter_handle", - "socials" -]New value: +[ + "name", + "alternate_name", + "site_name", + "title", + "job_title", + "headline_primary", + "headline_secondary", + "description", + "keywords", + "email", + "calendar_url", + "site_url", + "twitter_handle", + "socials", + "work_location" +]
2 tool updates
- Added
compare_llm_hosting - Added
get_article
1 tool update
- Changed
search_articles1 field changed- changed
Input schema / properties / limit / defaultPrevious value: -0New value: +10
7 tool updates
- First observed
get_profile - First observed
get_services - First observed
list_certifications - First observed
list_experience - First observed
list_projects - First observed
list_publications - First observed
search_articles
Related MCP Connectors
Read-only Fillfolio portfolios, holdings, cash, liabilities, activity, spending and budgets.
Read-only access to Krish Parekh's profile, projects, articles and hiring info.
Read-only access to pavels.dev: services, case studies, articles and team of a web dev studio.
Read-only access to Sigao Li's profile, CV and case studies. Bilingual (EN/ZH).
Related MCP Servers
AlicenseNot gradedqualityBmaintenanceEnables read-only access to a Fillfolio account's normalized portfolio data, including net worth, holdings with cost basis, cash and liabilities, activity, and exact asset details, plus optional bank spending summaries, transactions, and budgets for eligible accounts. Clients can query stored data only — they cannot trade, move money, modify holdings, or access credentials.1 npmMIT- AlicenseAqualityCmaintenanceEnables read-only access to Finary portfolio data, including profiles, organizations, institution connections, portfolios, and transactions, through MCP.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables read-only access to Pocket Agent's product information, public persona templates, and app catalog. No authentication required.18 npm1MIT
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to the Family Office Knowledge Graph, enabling resolution of family offices, retrieval of public records with provenance, and listing of events, aliases, and nodes.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.