Skip to main content
Glama

Server Details

Capture photos remotely from mobile devices via S3-backed upload URLs

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

2 tools
generate_upload_urlAInspect

Generate a URL for remote camera upload. Send this URL to a mobile device to capture and upload a photo. The capture URL can be reused multiple times to upload different photos without generating a new URL. The URL will be in format: https://www.ai.moda/mcp-servers/remote-camera/capture/?url=PRESIGNED_URL

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoInstructions/message to display to the user on the capture page (max 200 characters)

Output Schema

ParametersJSON Schema
NameRequiredDescription
session_idYesSession ID used for this upload, in UUID format
capture_urlYesFull URL to send to mobile device for photo capture

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses reusability and the exact URL format, which is helpful. However, it does not mention any potential side effects, expiration, rate limits, or whether this creates a persistent record. For a generation tool with no annotations, this 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each adding meaningful information. The description is front-loaded with the core action and includes practical format details without any fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool with an output schema, the description covers purpose, usage, reuse, and output format. It doesn't explicitly link to the sibling polling tool, so there is a small gap in the overall workflow, but the tool itself is well described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers the 'message' parameter fully (instructions to display, max length), so the description adds only marginal value by implying the message is shown on the capture page. Baseline of 3 is appropriate given 100% schema coverage and no additional parameter details in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Generate' and the resource 'URL for remote camera upload', and explains its purpose (sending to a mobile device for photo capture). It also explicitly distinguishes from the sibling tool 'poll_for_upload' by focusing on generation rather than polling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete usage context ('Send this URL to a mobile device to capture and upload a photo') and notes that the URL can be reused. It doesn't explicitly mention poll_for_upload as an alternative or next step, so it stops short of full exclusions, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

poll_for_uploadAInspect

Poll S3 bucket waiting for photo upload to complete. Returns a presigned download URL when the file is ready. The same session_id can be used to poll for new uploads multiple times, allowing the capture URL to be reused.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoMax seconds to wait for upload
not_etagNoOnly detect files with different ETag than this value, used to poll for new uploads
session_idYesSession ID to poll for, in UUID format
modified_sinceNoOnly detect files modified after this date in ISO 8601 or HTTP date format

Output Schema

ParametersJSON Schema
NameRequiredDescription
etagYesETag of the uploaded file, can be used with not_etag parameter for subsequent polls
download_urlYesPresigned GET URL to download the uploaded photo, valid for 7 days
last_modifiedNoLast modified timestamp of the uploaded file from S3

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses that the tool blocks while waiting, returns a presigned download URL, and that polling is repeatable with the same session_id so the capture URL can be reused. It does not describe timeout failure behavior, but the blocking nature is implied and the reuse property is a valuable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states the core action and result, and the second adds a key reuse behavior. Every clause contributes useful information, and the most important details are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and complete parameter schema, the description provides sufficient context for most calling scenarios: it defines the polling purpose, the return value, and the reuse capability. It could be more explicit about timeout behavior or the prerequisite of generating an upload URL, but these are inferable from the parameter schema and sibling tool name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining that session_id can be reused across multiple polling calls and that this allows the capture URL to be reused, which is not stated in the session_id property description. Other parameters are already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb, resource, and outcome: 'Poll S3 bucket waiting for photo upload to complete' and 'Returns a presigned download URL when the file is ready.' This clearly distinguishes it from the sibling generate_upload_url, which creates the upload URL rather than waiting for completion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use the tool: after an upload has been initiated, to wait until it completes and obtain a download URL. It also gives a usage pattern by stating the same session_id can be reused for multiple polls, but it does not explicitly contrast with generate_upload_url or state 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-09-04T00:00:00.000Z",
        -  "Sat, 29 Aug 2026 00:00:00 GMT",
        -  "2026-09-03T00:00:00.000Z"
        -]New value: +[
        +  "2026-09-05T00:00:00.000Z",
        +  "Sun, 30 Aug 2026 00:00:00 GMT",
        +  "2026-09-04T00:00:00.000Z"
        +]
  2. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-09-03T00:00:00.000Z",
        -  "Fri, 28 Aug 2026 00:00:00 GMT",
        -  "2026-09-02T00:00:00.000Z"
        -]New value: +[
        +  "2026-09-04T00:00:00.000Z",
        +  "Sat, 29 Aug 2026 00:00:00 GMT",
        +  "2026-09-03T00:00:00.000Z"
        +]
  3. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-09-02T00:00:00.000Z",
        -  "Thu, 27 Aug 2026 00:00:00 GMT",
        -  "2026-09-01T00:00:00.000Z"
        -]New value: +[
        +  "2026-09-03T00:00:00.000Z",
        +  "Fri, 28 Aug 2026 00:00:00 GMT",
        +  "2026-09-02T00:00:00.000Z"
        +]
  4. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-09-01T00:00:00.000Z",
        -  "Wed, 26 Aug 2026 00:00:00 GMT",
        -  "2026-08-31T00:00:00.000Z"
        -]New value: +[
        +  "2026-09-02T00:00:00.000Z",
        +  "Thu, 27 Aug 2026 00:00:00 GMT",
        +  "2026-09-01T00:00:00.000Z"
        +]
  5. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-31T00:00:00.000Z",
        -  "Tue, 25 Aug 2026 00:00:00 GMT",
        -  "2026-08-30T00:00:00.000Z"
        -]New value: +[
        +  "2026-09-01T00:00:00.000Z",
        +  "Wed, 26 Aug 2026 00:00:00 GMT",
        +  "2026-08-31T00:00:00.000Z"
        +]
  6. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-30T00:00:00.000Z",
        -  "Mon, 24 Aug 2026 00:00:00 GMT",
        -  "2026-08-29T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-31T00:00:00.000Z",
        +  "Tue, 25 Aug 2026 00:00:00 GMT",
        +  "2026-08-30T00:00:00.000Z"
        +]
  7. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-29T00:00:00.000Z",
        -  "Sun, 23 Aug 2026 00:00:00 GMT",
        -  "2026-08-28T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-30T00:00:00.000Z",
        +  "Mon, 24 Aug 2026 00:00:00 GMT",
        +  "2026-08-29T00:00:00.000Z"
        +]
  8. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-28T00:00:00.000Z",
        -  "Sat, 22 Aug 2026 00:00:00 GMT",
        -  "2026-08-27T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-29T00:00:00.000Z",
        +  "Sun, 23 Aug 2026 00:00:00 GMT",
        +  "2026-08-28T00:00:00.000Z"
        +]
  9. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-27T00:00:00.000Z",
        -  "Fri, 21 Aug 2026 00:00:00 GMT",
        -  "2026-08-26T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-28T00:00:00.000Z",
        +  "Sat, 22 Aug 2026 00:00:00 GMT",
        +  "2026-08-27T00:00:00.000Z"
        +]
  10. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-26T00:00:00.000Z",
        -  "Thu, 20 Aug 2026 00:00:00 GMT",
        -  "2026-08-25T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-27T00:00:00.000Z",
        +  "Fri, 21 Aug 2026 00:00:00 GMT",
        +  "2026-08-26T00:00:00.000Z"
        +]
  11. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-25T00:00:00.000Z",
        -  "Wed, 19 Aug 2026 00:00:00 GMT",
        -  "2026-08-24T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-26T00:00:00.000Z",
        +  "Thu, 20 Aug 2026 00:00:00 GMT",
        +  "2026-08-25T00:00:00.000Z"
        +]
  12. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-24T00:00:00.000Z",
        -  "Tue, 18 Aug 2026 00:00:00 GMT",
        -  "2026-08-23T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-25T00:00:00.000Z",
        +  "Wed, 19 Aug 2026 00:00:00 GMT",
        +  "2026-08-24T00:00:00.000Z"
        +]
  13. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-23T00:00:00.000Z",
        -  "Mon, 17 Aug 2026 00:00:00 GMT",
        -  "2026-08-22T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-24T00:00:00.000Z",
        +  "Tue, 18 Aug 2026 00:00:00 GMT",
        +  "2026-08-23T00:00:00.000Z"
        +]
  14. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-22T00:00:00.000Z",
        -  "Sun, 16 Aug 2026 00:00:00 GMT",
        -  "2026-08-21T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-23T00:00:00.000Z",
        +  "Mon, 17 Aug 2026 00:00:00 GMT",
        +  "2026-08-22T00:00:00.000Z"
        +]
  15. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-21T00:00:00.000Z",
        -  "Sat, 15 Aug 2026 00:00:00 GMT",
        -  "2026-08-20T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-22T00:00:00.000Z",
        +  "Sun, 16 Aug 2026 00:00:00 GMT",
        +  "2026-08-21T00:00:00.000Z"
        +]
  16. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-20T00:00:00.000Z",
        -  "Fri, 14 Aug 2026 00:00:00 GMT",
        -  "2026-08-19T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-21T00:00:00.000Z",
        +  "Sat, 15 Aug 2026 00:00:00 GMT",
        +  "2026-08-20T00:00:00.000Z"
        +]
  17. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-19T00:00:00.000Z",
        -  "Thu, 13 Aug 2026 00:00:00 GMT",
        -  "2026-08-18T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-20T00:00:00.000Z",
        +  "Fri, 14 Aug 2026 00:00:00 GMT",
        +  "2026-08-19T00:00:00.000Z"
        +]
  18. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-18T00:00:00.000Z",
        -  "Wed, 12 Aug 2026 00:00:00 GMT",
        -  "2026-08-17T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-19T00:00:00.000Z",
        +  "Thu, 13 Aug 2026 00:00:00 GMT",
        +  "2026-08-18T00:00:00.000Z"
        +]
  19. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-17T00:00:00.000Z",
        -  "Tue, 11 Aug 2026 00:00:00 GMT",
        -  "2026-08-16T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-18T00:00:00.000Z",
        +  "Wed, 12 Aug 2026 00:00:00 GMT",
        +  "2026-08-17T00:00:00.000Z"
        +]
  20. 1 tool update
    • Changedpoll_for_upload1 field changed
      • changedInput schema / properties / modified_since / examples
        Previous value: -[
        -  "2026-08-16T00:00:00.000Z",
        -  "Mon, 10 Aug 2026 00:00:00 GMT",
        -  "2026-08-15T00:00:00.000Z"
        -]New value: +[
        +  "2026-08-17T00:00:00.000Z",
        +  "Tue, 11 Aug 2026 00:00:00 GMT",
        +  "2026-08-16T00:00:00.000Z"
        +]

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation5/5

The two tools are clearly distinct: one generates a capture URL, the other polls for the resulting upload. There is no overlap in purpose or ambiguity about which to call when.

Naming Consistency4/5

Both tools use a verb_noun pattern (generate_upload_url, poll_for_upload), but one uses 'for' as a connector while the other does not. Minor stylistic inconsistency, otherwise predictable.

Tool Count3/5

Two tools is minimal for the stated purpose, but the simple capture-and-poll workflow is adequately represented. It feels thin but not absurdly incomplete for a narrow domain.

Completeness4/5

The core lifecycle of remote capture and retrieval is covered: generate a reusable URL, then poll for the result. There is no explicit cancel or status operation, but polling covers the necessary flow without dead ends.

Resources