Skip to main content
Glama

Edit one of your own Tulimoa listings

edit_listing

Update fields of a listing you own (by slug), with the same fields and rules as the web editor. Only the fields you pass change. Changes to a live listing show right away and are checked by the team afterwards. A changed MCP endpoint on a live listing sends it back into review. Editing a rejected listing resubmits it for review when the rejection reason allows it (not after spam, duplicate, not a product or the listing limit). The Tulimoa badge is re-checked on every edit. Every listing needs a logo: pass logo_url to replace it (required if it has none). gallery_urls and content_blocks replace the whole list. Requires a write-scoped Tulimoa login.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "slug": "<slug>"
    },
    "name": "edit_listing"
  }
}

Input Schema

NameRequiredDescriptionDefault
mcpNo
urlNoThe product's own website (http or https).
nameNo
slugYesSlug of YOUR listing to edit (from submit_listing or get_listing).
countryNoISO-3166-1 alpha-2 code of the company's HQ.
ai_usageNo40 to 600 characters, ideally in English: how the software uses AI, or what agents can do with it. Be concrete, not salesy. Submissions without a clear AI or agent angle are rejected.
categoryNo
demo_urlNoOptional demo or video URL.
docs_urlNoOptional documentation URL.
gdpr_dpaNo
logo_urlNoNew logo. Public https URL of the company logo: PNG, JPEG, WebP, GIF or AVIF, at least 64 px, max 10 MB. A square icon works best. Tulimoa downloads it, scales it to max 512 px and stores it as WebP. Required if the listing has no logo yet.
mcp_authNo
x_handleNo
team_sizeNoOptional team size: 1, 2-10, 11-50, 51-250 or 250+.
data_regionNoWhere customer data is hosted: eu (in the EU by default), eu-option (an EU region can be selected), non-eu, self-hosted (runs at the customer). Listings with EU hosting also appear on tulimoa.com/mcp-eu.
launch_hookNo
open_sourceNoOptional: the software is open source.
founded_yearNoOptional founding year.
gallery_urlsNoOptional screenshots, up to 5 public https image URLs (PNG, JPEG, WebP, GIF or AVIF, max 10 MB each). The first one is the hero image. Tulimoa scales them to max 1280 px and stores them as WebP. Images already stored on Tulimoa (from get_listing) are kept as they are.
mcp_docs_urlNo
model_sourceNo
pricing_modelNo
certificationsNo
content_blocksNoOptional profile sections, like in the web form. type: long_description (max 600 chars), ideal_for, not_for, key_features (one feature per line, 5 to 10 lines, max 600), use_cases, integrations (comma-separated). Max 400 chars unless noted. Several blocks of the same type are allowed. Write in English. On edit, the list replaces all blocks.
mcp_server_urlNoMCP endpoint. Changing it on a live listing sends it back into review.
pricing_detailNo
agent_interfacesNo
gallery_captionsNoOptional captions for gallery_urls, same order, max 120 chars each.
hosting_providerNo
founder_x_handlesNo
notable_customersNoOptional notable customers, e.g. 'Acme, Globex'.
short_descriptionNo
trains_on_customer_dataNo

Output Schema

NameRequiredDescriptionDefault
idYesListing id.
slugYes
statusYesStatus after the edit: approved (live), pending (in review) or rejected.
back_in_reviewYestrue = the edit sent the listing (back) into review.
badge_verifiedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed28 schema fields changed
    • addedInput schema / properties / content_blocks
      Added value: +{
      +  "description": "Optional profile sections, like in the web form. type: long_description (max 600 chars), ideal_for, not_for, key_features (one feature per line, 5 to 10 lines, max 600), use_cases, integrations (comma-separated). Max 400 chars unless noted. Several blocks of the same type are allowed. Write in English. On edit, the list replaces all blocks.",
      +  "items": {
      +    "properties": {
      +      "content": {
      +        "maxLength": 600,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "subject": {
      +        "description": "Only for ideal_for and not_for: the short audience after 'Ideal for' / 'Not for', e.g. 'small SaaS teams'.",
      +        "maxLength": 100,
      +        "type": "string"
      +      },
      +      "type": {
      +        "enum": [
      +          "long_description",
      +          "ideal_for",
      +          "not_for",
      +          "key_features",
      +          "use_cases",
      +          "integrations"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "content"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 30,
      +  "type": "array"
      +}
    • addedInput schema / properties / country
      Added value: +{
      +  "description": "ISO-3166-1 alpha-2 code of the company's HQ.",
      +  "enum": [
      +    "AR",
      +    "AU",
      +    "AT",
      +    "BE",
      +    "BR",
      +    "BG",
      +    "CA",
      +    "CL",
      +    "CN",
      +    "CO",
      +    "HR",
      +    "CY",
      +    "CZ",
      +    "DK",
      +    "EG",
      +    "EE",
      +    "FI",
      +    "FR",
      +    "DE",
      +    "GR",
      +    "HK",
      +    "HU",
      +    "IS",
      +    "IN",
      +    "ID",
      +    "IE",
      +    "IL",
      +    "IT",
      +    "JP",
      +    "LV",
      +    "LI",
      +    "LT",
      +    "LU",
      +    "MY",
      +    "MT",
      +    "MX",
      +    "MA",
      +    "NL",
      +    "NZ",
      +    "NG",
      +    "NO",
      +    "PE",
      +    "PH",
      +    "PL",
      +    "PT",
      +    "RO",
      +    "SA",
      +    "RS",
      +    "SG",
      +    "SK",
      +    "SI",
      +    "ZA",
      +    "KR",
      +    "ES",
      +    "SE",
      +    "CH",
      +    "TW",
      +    "TH",
      +    "TR",
      +    "UA",
      +    "AE",
      +    "GB",
      +    "US",
      +    "VN"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / demo_url
      Added value: +{
      +  "description": "Optional demo or video URL.",
      +  "maxLength": 500,
      +  "type": "string"
      +}
    • addedInput schema / properties / docs_url
      Added value: +{
      +  "description": "Optional documentation URL.",
      +  "maxLength": 500,
      +  "type": "string"
      +}
    • addedInput schema / properties / founded_year
      Added value: +{
      +  "description": "Optional founding year.",
      +  "maximum": 2100,
      +  "minimum": 1900,
      +  "type": "integer"
      +}
    • addedInput schema / properties / gallery_captions
      Added value: +{
      +  "description": "Optional captions for gallery_urls, same order, max 120 chars each.",
      +  "items": {
      +    "maxLength": 120,
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
    • addedInput schema / properties / gallery_urls
      Added value: +{
      +  "description": "Optional screenshots, up to 5 public https image URLs (PNG, JPEG, WebP, GIF or AVIF, max 10 MB each). The first one is the hero image. Tulimoa scales them to max 1280 px and stores them as WebP. Images already stored on Tulimoa (from get_listing) are kept as they are.",
      +  "items": {
      +    "maxLength": 1000,
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
    • changedInput schema / properties / logo_url / description
      Previous value: -"New logo. Public https URL of the company logo: PNG, JPEG, WebP, GIF or AVIF, at least 64 px, max 5 MB. A square icon works best. Tulimoa downloads it, scales it to max 512 px and stores it as WebP. Required if the listing has no logo yet."New value: +"New logo. Public https URL of the company logo: PNG, JPEG, WebP, GIF or AVIF, at least 64 px, max 10 MB. A square icon works best. Tulimoa downloads it, scales it to max 512 px and stores it as WebP. Required if the listing has no logo yet."
    • removedInput schema / properties / logo_url / format
      Removed value: -"uri"
    • addedInput schema / properties / logo_url / maxLength
      Added value: +500
    • removedInput schema / properties / mcp_docs_url / format
      Removed value: -"uri"
    • addedInput schema / properties / mcp_docs_url / maxLength
      Added value: +500
    • addedInput schema / properties / mcp_server_url / description
      Added value: +"MCP endpoint. Changing it on a live listing sends it back into review."
    • removedInput schema / properties / mcp_server_url / format
      Removed value: -"uri"
    • addedInput schema / properties / mcp_server_url / maxLength
      Added value: +500
    • addedInput schema / properties / notable_customers
      Added value: +{
      +  "description": "Optional notable customers, e.g. 'Acme, Globex'.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • addedInput schema / properties / open_source
      Added value: +{
      +  "description": "Optional: the software is open source.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / slug / description
      Previous value: -"Slug of YOUR listing to edit (from submit_listing)."New value: +"Slug of YOUR listing to edit (from submit_listing or get_listing)."
    • removedInput schema / properties / tags
      Removed value: -{
      -  "items": {
      -    "maxLength": 40,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "maxItems": 8,
      -  "type": "array"
      -}
    • addedInput schema / properties / team_size
      Added value: +{
      +  "description": "Optional team size: 1, 2-10, 11-50, 51-250 or 250+.",
      +  "enum": [
      +    "1",
      +    "2-10",
      +    "11-50",
      +    "51-250",
      +    "250+"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / url / description
      Added value: +"The product's own website (http or https)."
    • removedInput schema / properties / url / format
      Removed value: -"uri"
    • addedInput schema / properties / url / maxLength
      Added value: +500
    • addedOutput schema / properties / back_in_review
      Added value: +{
      +  "description": "true = the edit sent the listing (back) into review.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / badge_verified
      Added value: +{
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / status / const
      Removed value: -"pending"
    • addedOutput schema / properties / status / description
      Added value: +"Status after the edit: approved (live), pending (in review) or rejected."
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "slug",
      -  "status"
      -]New value: +[
      +  "id",
      +  "slug",
      +  "status",
      +  "badge_verified",
      +  "back_in_review"
      +]
  2. Changed15 schema fields changed
    • addedInput schema / properties / agent_interfaces
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "api",
      +      "cli",
      +      "sdk",
      +      "webhooks"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 4,
      +  "type": "array"
      +}
    • addedInput schema / properties / ai_usage
      Added value: +{
      +  "description": "40 to 600 characters, ideally in English: how the software uses AI, or what agents can do with it. Be concrete, not salesy. Submissions without a clear AI or agent angle are rejected.",
      +  "maxLength": 600,
      +  "minLength": 40,
      +  "type": "string"
      +}
    • addedInput schema / properties / certifications
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "soc2",
      +      "iso27001",
      +      "hipaa"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 3,
      +  "type": "array"
      +}
    • addedInput schema / properties / data_region
      Added value: +{
      +  "description": "Where customer data is hosted: eu (in the EU by default), eu-option (an EU region can be selected), non-eu, self-hosted (runs at the customer). Listings with EU hosting also appear on tulimoa.com/mcp-eu.",
      +  "enum": [
      +    "eu",
      +    "eu-option",
      +    "non-eu",
      +    "self-hosted"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / founder_x_handles
      Added value: +{
      +  "items": {
      +    "maxLength": 40,
      +    "type": "string"
      +  },
      +  "maxItems": 4,
      +  "type": "array"
      +}
    • addedInput schema / properties / gdpr_dpa
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / hosting_provider
      Added value: +{
      +  "maxLength": 60,
      +  "type": "string"
      +}
    • addedInput schema / properties / launch_hook
      Added value: +{
      +  "maxLength": 140,
      +  "type": "string"
      +}
    • addedInput schema / properties / mcp_auth
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "oauth",
      +      "api"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 2,
      +  "type": "array"
      +}
    • addedInput schema / properties / mcp_docs_url
      Added value: +{
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedInput schema / properties / mcp_server_url
      Added value: +{
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedInput schema / properties / model_source
      Added value: +{
      +  "enum": [
      +    "own",
      +    "open-weight",
      +    "provider",
      +    "mixed",
      +    "none"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / pricing_detail
      Added value: +{
      +  "maxLength": 400,
      +  "type": "string"
      +}
    • addedInput schema / properties / trains_on_customer_data
      Added value: +{
      +  "enum": [
      +    "no",
      +    "opt-out",
      +    "yes"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / x_handle
      Added value: +{
      +  "maxLength": 40,
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / logo_url
      Added value: +{
      +  "description": "New logo. Public https URL of the company logo: PNG, JPEG, WebP, GIF or AVIF, at least 64 px, max 5 MB. A square icon works best. Tulimoa downloads it, scales it to max 512 px and stores it as WebP. Required if the listing has no logo yet.",
      +  "format": "uri",
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "id": {
      +      "description": "Listing id.",
      +      "type": "string"
      +    },
      +    "slug": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "const": "pending",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "slug",
      +    "status"
      +  ],
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / category / enum
      Previous value: -[
      -  "sales-crm",
      -  "marketing",
      -  "communication",
      -  "productivity",
      -  "developer-tools",
      -  "finance-ops",
      -  "hr-people",
      -  "customer-support",
      -  "data-analytics",
      -  "ai-infra",
      -  "compliance-hosting"
      -]New value: +[
      +  "developer-tools",
      +  "ai-infra",
      +  "sales-crm",
      +  "marketing",
      +  "productivity",
      +  "data-analytics",
      +  "finance-accounting",
      +  "customer-support",
      +  "hr-recruiting",
      +  "design-creative",
      +  "security-privacy",
      +  "communication",
      +  "commerce-payments",
      +  "automation-nocode",
      +  "other"
      +]
  6. Added

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: partial-update semantics ('only the fields you pass change'), immediate visibility with post-hoc team review, MCP endpoint changes forcing re-review, badge re-checking, logo being mandatory, and the write-scoped login requirement. This is exactly the side-effect context an agent needs before mutating a live listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action, then layered with consequences in short declarative sentences. Nearly every sentence earns its place, though the badge re-check line is marginal and the whole is longer than typical.

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 33-parameter mutation tool with no annotations, the description covers the behavioral and replace-semantics landmines, and the output schema handles return values. What remains thin is field-level guidance for the long tail of low-coverage parameters.

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 only 48% across 33 parameters, yet the description compensates on the highest-risk ones: gallery_urls and content_blocks replace the entire list, logo_url is required when none exists, and mcp_server_url changes trigger review. Many minor fields (x_handle, launch_hook, pricing_detail) are left to the schema, so it does not fully close the coverage gap.

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?

States a specific verb (update) and resource (a listing you own), scoped by slug, and pins the field set to 'the same fields and rules as the web editor.' That phrasing alone separates it from submit_listing (create) and get_listing (read) 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.

Usage Guidelines4/5

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

Makes clear this is for editing your own existing listing and explains what happens in edge cases (rejected listings resubmitting unless the rejection was spam/duplicate/not-a-product/limit). It does not explicitly name sibling alternatives like submit_listing for new listings, leaving that inference to the agent.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.