Headshot Photo Check
Server Details
Technical checks and crop recommendations for professional profile and application photos.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 2 tools
The two tools are clearly separated: check_headshot_photo analyzes an actual supplied image, while get_headshot_photo_requirements returns static text recommendations with no image input. Descriptions explicitly cross-reference the boundary ('Do not use for assessing an actual image' vs. the analysis tool), leaving no realistic chance of misselection.
Both names follow a consistent verb_noun pattern (check_headshot_photo, get_headshot_photo_requirements) with shared domain prefix 'headshot_photo'. No mixed casing or verb-style drift.
Two tools is thin even for a narrow, single-purpose server; the entire surface is one analysis call plus one static checklist. It is not padded or over-scoped, but it sits at the borderline where the set feels minimal rather than well-rounded.
The core loop (check a photo, get guidance on what to aim for) is covered, but the analysis has acknowledged holes: sharpness detects only coarse blur, face framing is not checked, and without an Images binding most inputs get header-only results. For a 'photo check' service these are notable gaps an agent cannot work around, though the limitations are stated openly.
Available Tools
2 toolscheck_headshot_photoCheck headshot photoARead-onlyIdempotentInspect
Use this when the user wants technical checks of one professional profile or job-application photo from a public HTTPS URL or base64. Maximum 8 MB; image_url is recommended. Base64 above roughly 150 KB may exceed the Worker CPU budget. Auto mode resizes through an optional Images binding for pixel metrics, including WebP. Without it, only small JPEG/PNG inputs receive pixel checks; other inputs receive explicit header-only results. Sharpness detects coarse blur only. Face framing is not checked. URL fetching contacts user-selected external hosts and is limited to 8 seconds and 3 redirects. Cloudflare Images may internally resize the input for metrics; no edited image is returned. Operational call metadata is logged. Do not use for image creation, editing, personal-attribute judgments or identity verification. The image is analysed in memory and not stored. It does not generate images, video or audio or return edited images. It does not judge attractiveness, identity, age, gender, ethnicity or any other personal attribute; no face recognition or biometric identification.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Destination for crop recommendations: linkedin, xing, application or all (default). Example: linkedin. All includes every destination. | all |
| image_url | No | Public HTTPS image URL without credentials or custom port. IP literals and internal hostnames are blocked. Fetching contacts the user-selected external image host and validated redirect hosts; those hosts may log requests. Maximum 2048 characters. | |
| image_base64 | No | One JPEG, PNG or WebP encoded as base64, optionally prefixed by data:image/...;base64,. At most 8,000,000 decoded bytes. Prefer image_url; base64 payloads above roughly 150 KB may exceed the Worker CPU budget. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| target | Yes | Destination for crop recommendations: linkedin, xing, application or all (default). Example: linkedin. All includes every destination. |
| verdict | Yes | |
| criteria | Yes | |
| score_scope | Yes | |
| analysis_mode | Yes | |
| overall_score | Yes | |
| improvement_tips | Yes | |
| recommended_crops | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false and openWorldHint=true, yet the description still adds substantial behavior: 8 MB cap, a Worker CPU budget that makes base64 over ~150 KB risky, an optional Images binding that changes which inputs get pixel metrics versus header-only results, sharpness limited to coarse blur, no face-framing check, 8-second/3-redirect fetch limits, and in-memory analysis with no storage. These disclosures are consistent with the annotations — the external-host fetching matches openWorldHint and the no-storage statement matches readOnlyHint/non-destructive.
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 size, mode and fetch-limit facts are usefully front-loaded, but the tail of the description repeats the same exclusions three times ("no edited image is returned," "does not generate images, video or audio or return edited images," and "no face recognition or biometric identification" after the personal-attribute exclusion). Roughly a third of the text is restatement, which dilutes the operational facts an agent needs.
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?
An output schema exists, so return values need not be described, and the description covers the remaining burden well: input limits, mode-dependent behavior, external-fetch semantics, logging, and privacy. The one gap is that it never positions the tool against its only sibling, leaving the agent to guess when requirements retrieval should precede a check.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description largely restates the schema: "image_url is recommended" and the ~150 KB base64 caveat both already appear in the property descriptions. The target parameter's four enum values (linkedin, xing, application, all) and what "all" means are never discussed in the description, so it adds little meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: "technical checks of one professional profile or job-application photo," with the accepted input forms (HTTPS URL or base64). It also carves out a clear boundary by excluding creation, editing, personal-attribute judgment and identity verification, which implicitly separates it from get_headshot_photo_requirements. It never names that sibling explicitly, so an agent must infer the split rather than read it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening clause gives an explicit trigger ("Use this when the user wants technical checks of one professional profile or job-application photo") and a long list of when-not cases (creation, editing, personal attributes, identity verification). What is missing is routing: the sibling get_headshot_photo_requirements is never mentioned, so an agent has no stated rule for choosing between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_headshot_photo_requirementsGet headshot requirementsARead-onlyIdempotentInspect
Use this when the user wants a technical headshot checklist and crop recommendations for LinkedIn, XING or job applications. Returns static recommendations, not official platform upload limits; no image input or external network access. No persistent changes; operational call metadata is logged. Do not use for assessing an actual image or confirming platform acceptance. The image is analysed in memory and not stored. It does not generate images, video or audio or return edited images. It does not judge attractiveness, identity, age, gender, ethnicity or any other personal attribute; no face recognition or biometric identification.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Destination for crop recommendations: linkedin, xing, application or all (default). Example: linkedin. All includes every destination. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| target | Yes | Destination for crop recommendations: linkedin, xing, application or all (default). Example: linkedin. All includes every destination. |
| checklist | Yes | |
| recommendations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, and the description goes further by disclosing that results are static rather than official platform limits, that metadata is logged, and that no network access or persistent changes occur. One flaw: it says 'no image input' yet also says 'The image is analysed in memory and not stored', which is internally inconsistent and could confuse an agent about whether an image is accepted.
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 use case and exclusions are correctly front-loaded, but the paragraph accumulates overlapping negations ('does not generate images, video or audio or return edited images', 'no face recognition or biometric identification' on top of the earlier personal-attribute disclaimer). The stray 'image is analysed in memory' sentence adds noise rather than information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description adequately covers scope, static-vs-official caveat, and privacy posture for a zero-required-parameter read tool. The only completeness issue is the ambiguous image-handling statement, which sits awkwardly against the declared 'no image input'.
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 single 'target' enum is fully documented in the schema with a default and example, so the baseline is 3. The description does not mention the target parameter or add any meaning about how 'all' aggregates destinations beyond what the schema already states.
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: returns a technical headshot checklist and crop recommendations for LinkedIn, XING or job applications. It also distinguishes itself from the sibling check_headshot_photo by explicitly saying it is not for assessing an actual image, so an agent can route between the two without opening either 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?
Gives an explicit trigger ('when the user wants a technical headshot checklist and crop recommendations') and an explicit exclusion ('Do not use for assessing an actual image or confirming platform acceptance'), which effectively names the sibling tool's territory. The when/when-not pair is unusually complete.
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.
2 tool updates
- First observed
check_headshot_photo - First observed
get_headshot_photo_requirements
Related MCP Connectors
LinkedIn, Slack and GitHub profile photo specs, headshot style guides and a free headshot audit.
Professional profile photos and headshots from your own selfies.
Turn a portrait into a compliant passport, visa or ID photo. 300+ official specs, 3 free a day.
Passport and visa photo rules for 110 documents in 60 countries, and upload limits as exact numbers.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables local, offline generation and validation of passport, visa, exam, and other standard portrait photos, with face detection, background replacement, specification-based cropping, and print-sheet layout.MIT
- AlicenseAqualityBmaintenanceCompresses PDFs and images (including iPhone HEIC photos) to fit an upload limit, or a form's exact rules such as the US visa photo, IBPS or SSC uploads. Keeps the file's format and as much quality as the limit allows.275 npm1MIT

Charmshots MCPofficial
AlicenseNot gradedqualityBmaintenanceEnables creation of AI portraits from your own photographs.58 npmMIT- AlicenseNot gradedqualityCmaintenanceEnables agents to run checklist-driven e-commerce image quality inspection with auditable local rules, returning pass/needs-work/fail verdicts, actionable fixes, SKU consistency checks, report files, threshold advice from reviewer overrides, and token cost estimates.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.