Skip to main content
Glama

create_project

Store a product on the account. Before asking the maker anything, use what you can already see: a README, package metadata, the site's own copy and title, an assets or public folder. A maker working in their product's repository should be able to say 'add my product to SubmitMap' and get a filled-in project back, with questions only about what is genuinely not there. Fill in as much as you can, leave the rest, and come back with update_project. Facts drive what it qualifies for; the pack is what you will paste into forms later. Ask about images early: most platforms want a square logo and many want a cover, and every asset in the pack is two fields, the public address (logoUrl) and the file on the maker's machine (logoFile), because a form uploads the file and only the address can be shown back to them.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNo
nameYes
packNo
factsNoSame shape qualify_project takes: stage, pricingModel, categories, and the booleans. It is also where the two answers that decide a run order live once the maker has given them (`goal`, `budget`, and `launchAt` if they named a date), which is what stops the next session asking again. Leave domainRating out: the url is measured against Ahrefs on the way in and the measured number is what gets stored, so a guess here is overwritten anyway.
pitchNoOne paragraph in the maker's own words.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • changedInput schema / properties / facts / properties / categories / description
      Previous value: -"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, an mcp server is `mcp`, a workspace with several of those means all of them. Then answer what it is commercially, which is a separate question and the one most runs lose platforms on: most launch boards say what they take by who ships it, not by what it runs on, so a subscription mobile app is `mobile` and `saas`, anything a solo maker or small team shipped is `indie`, and something sold to companies is `b2b`. Leaving those off does not make the run safer, it makes it shorter. Tags: agent-skill, ai, b2b, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mcp, mobile, no-code, open-source, prelaunch, productivity, saas, web."New value: +"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, an mcp server is `mcp`, a workspace with several of those means all of them. Then answer what it is commercially, which is a separate question and the one most runs lose platforms on: most launch boards say what they take by who ships it, not by what it runs on, so a subscription mobile app is `mobile` and `saas`, anything a solo maker or small team shipped is `indie`, and something sold to companies is `b2b`. Leaving those off does not make the run safer, it makes it shorter. Tags: agent-skill, ai, b2b, christian, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mcp, mobile, no-code, open-source, prelaunch, productivity, saas, turkish-founders, web."
    • changedInput schema / properties / facts / properties / categories / items / enum
      Previous value: -[
      -  "agent-skill",
      -  "ai",
      -  "b2b",
      -  "community",
      -  "content",
      -  "design",
      -  "dev",
      -  "directory",
      -  "extension",
      -  "free",
      -  "hardware",
      -  "indie",
      -  "local",
      -  "marketing",
      -  "marketplace",
      -  "mcp",
      -  "mobile",
      -  "no-code",
      -  "open-source",
      -  "prelaunch",
      -  "productivity",
      -  "saas",
      -  "web"
      -]New value: +[
      +  "agent-skill",
      +  "ai",
      +  "b2b",
      +  "christian",
      +  "community",
      +  "content",
      +  "design",
      +  "dev",
      +  "directory",
      +  "extension",
      +  "free",
      +  "hardware",
      +  "indie",
      +  "local",
      +  "marketing",
      +  "marketplace",
      +  "mcp",
      +  "mobile",
      +  "no-code",
      +  "open-source",
      +  "prelaunch",
      +  "productivity",
      +  "saas",
      +  "turkish-founders",
      +  "web"
      +]
    • addedInput schema / properties / pack / properties / alternativeTo
      Added value: +{
      +  "description": "Well-known products this replaces, by name. Alternative directories will not take a listing without one. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / pack / properties / audience
      Added value: +{
      +  "description": "The people it is built for, like Freelancers or Small businesses, for the forms with a target-audience picker. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / pack / properties / buildStory
      Added value: +{
      +  "description": "Why and how it was built, with the real numbers, for community posts and maker showcases that want a story rather than a description. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / companyName
      Added value: +{
      +  "description": "The business behind the product, when it is not the product name. Review sites and B2B directories list the company. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / extendedDescription
      Added value: +{
      +  "description": "A full write-up of 400 words or more (about 2,500 characters) for the forms that set a minimum length. The long description above is shorter on purpose. Drafting it from the product is fine, but show the maker before it is used, because it goes out under their name. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / foundedYear
      Added value: +{
      +  "description": "Four digits. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / fundingStage
      Added value: +{
      +  "description": "Bootstrapped, or what was raised and at which stage. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / howItWorks
      Added value: +{
      +  "description": "Three short steps, one per line, under 200 characters each. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / pack / properties / location
      Added value: +{
      +  "description": "City and country, or country alone. Asked for as headquarters, and it decides the regional directories. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / makerName
      Added value: +{
      +  "description": "The person shown as the maker, first and last name, exactly as it should be printed on a listing. Launch boards and founder profiles require it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / makerRole
      Added value: +{
      +  "description": "Their title, like Founder or Solo developer. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / monthlyRevenue
      Added value: +{
      +  "description": "MRR or a bracket like $0-1k, and only if the maker is happy for it to be public: forms that ask for it usually display it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / monthlyVisitors
      Added value: +{
      +  "description": "A real figure from their analytics. Some directories make it a required number and print it. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / repoUrl
      Added value: +{
      +  "description": "The public repository, for open-source directories. Leave it empty for a closed-source product rather than pointing at something else.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / teamSize
      Added value: +{
      +  "description": "How many people work on it, as a number or a range like 2-10. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pack / properties / techStack
      Added value: +{
      +  "description": "What it is built with, five at most, like Next.js or Postgres. Launch boards for builders make it a required step. Only what the maker told you, never a guess. When a form requires it and it is empty here, ask the maker once, then save the answer with update_project so no other form stops on it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / facts / properties / categories / description
      Previous value: -"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, a workspace with several of those means all of them. Tags: agent-skill, ai, b2b, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mcp, mobile, no-code, open-source, prelaunch, productivity, saas, web."New value: +"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, an mcp server is `mcp`, a workspace with several of those means all of them. Then answer what it is commercially, which is a separate question and the one most runs lose platforms on: most launch boards say what they take by who ships it, not by what it runs on, so a subscription mobile app is `mobile` and `saas`, anything a solo maker or small team shipped is `indie`, and something sold to companies is `b2b`. Leaving those off does not make the run safer, it makes it shorter. Tags: agent-skill, ai, b2b, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mcp, mobile, no-code, open-source, prelaunch, productivity, saas, web."
  3. Changed2 schema fields changed
    • changedInput schema / properties / facts / properties / categories / description
      Previous value: -"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, a workspace with several of those means all of them. Tags: ai, b2b, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mobile, no-code, open-source, prelaunch, productivity, saas, web."New value: +"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, a workspace with several of those means all of them. Tags: agent-skill, ai, b2b, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mcp, mobile, no-code, open-source, prelaunch, productivity, saas, web."
    • changedInput schema / properties / facts / properties / categories / items / enum
      Previous value: -[
      -  "ai",
      -  "b2b",
      -  "community",
      -  "content",
      -  "design",
      -  "dev",
      -  "directory",
      -  "extension",
      -  "free",
      -  "hardware",
      -  "indie",
      -  "local",
      -  "marketing",
      -  "marketplace",
      -  "mobile",
      -  "no-code",
      -  "open-source",
      -  "prelaunch",
      -  "productivity",
      -  "saas",
      -  "web"
      -]New value: +[
      +  "agent-skill",
      +  "ai",
      +  "b2b",
      +  "community",
      +  "content",
      +  "design",
      +  "dev",
      +  "directory",
      +  "extension",
      +  "free",
      +  "hardware",
      +  "indie",
      +  "local",
      +  "marketing",
      +  "marketplace",
      +  "mcp",
      +  "mobile",
      +  "no-code",
      +  "open-source",
      +  "prelaunch",
      +  "productivity",
      +  "saas",
      +  "web"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / facts / description
      Previous value: -"Same shape qualify_project takes: stage, pricingModel, categories, and the booleans. Leave domainRating out: the url is measured against Ahrefs on the way in and the measured number is what gets stored, so a guess here is overwritten anyway."New value: +"Same shape qualify_project takes: stage, pricingModel, categories, and the booleans. It is also where the two answers that decide a run order live once the maker has given them (`goal`, `budget`, and `launchAt` if they named a date), which is what stops the next session asking again. Leave domainRating out: the url is measured against Ahrefs on the way in and the measured number is what gets stored, so a guess here is overwritten anyway."
  5. Changed1 schema field changed
    • addedInput schema / properties / pack / properties / xHandle
      Added value: +{
      +  "description": "Without the @. Launch boards ask for it and some make it a required field, so a pack without one stalls at the last step of a form that is otherwise finished. Fill it only with an account you hold: it is printed on the listing as the maker, and a handle typed to satisfy a validator credits whoever really owns it. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / facts / description
      Previous value: -"Same shape qualify_project takes: stage, pricingModel, categories, and the booleans."New value: +"Same shape qualify_project takes: stage, pricingModel, categories, and the booleans. Leave domainRating out: the url is measured against Ahrefs on the way in and the measured number is what gets stored, so a guess here is overwritten anyway."
  7. Changed8 schema fields changed
    • addedInput schema / properties / pack / properties / coverFile
      Added value: +{
      +  "description": "The same cover as a file on the machine your agent runs on, for the forms that upload it.",
      +  "type": "string"
      +}
    • changedInput schema / properties / pack / properties / coverUrl / description
      Previous value: -"1270x760, the size every gallery accepts. A URL or a local path."New value: +"1270x760, the size every gallery accepts. The public address of it."
    • addedInput schema / properties / pack / properties / demoVideoFile
      Added value: +{
      +  "description": "The video as a file on the machine your agent runs on, for the few platforms that upload rather than embed.",
      +  "type": "string"
      +}
    • changedInput schema / properties / pack / properties / demoVideoUrl / description
      Previous value: -"Optional almost everywhere, decisive on a few. A URL or a local path."New value: +"Optional almost everywhere, decisive on a few. A watch page or a hosted file."
    • addedInput schema / properties / pack / properties / galleryFiles
      Added value: +{
      +  "description": "The same frames as files on the machine your agent runs on, in the same order, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / pack / properties / galleryUrls / description
      Previous value: -"Three to five, first one a poster slide. URLs or local paths. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."New value: +"Three to five, first one a poster slide. Public addresses, one per line. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • addedInput schema / properties / pack / properties / logoFile
      Added value: +{
      +  "description": "The same logo as a file on the machine your agent runs on, like /Users/you/product/logo-512.png. This is the one a submission form uploads, because a file picker cannot be handed a link. It stays a path: nothing can display it, here or anywhere else.",
      +  "type": "string"
      +}
    • changedInput schema / properties / pack / properties / logoUrl / description
      Previous value: -"Square, transparent, 512px or better. A URL, or the path to the file on the machine your agent runs on."New value: +"Square, transparent, 512px or better. The public address of the image: forms with a logo URL field take this one, and it is what shows on your dashboard."
  8. Changed1 schema field changed
    • addedInput schema / properties / pack / properties / contactEmail
      Added value: +{
      +  "description": "The address you submit under. Most forms ask for one, and it is where the confirmation link lands, so a mailbox nobody opens stalls the submission. Per product, not per person: a client launch and a side project rarely want the same address, and the one you use here is the one the listing belongs to. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead.",
      +  "type": "string"
      +}
  9. Changed10 schema fields changed
    • changedInput schema / properties / pack / properties / categories / description
      Previous value: -"Three at most, in the platform's own vocabulary where it has one."New value: +"Three at most, in the platform's own vocabulary where it has one. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / firstComment / description
      Previous value: -"Product Hunt and Show HN only, and it matters there."New value: +"Product Hunt and Show HN only, and it matters there. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / galleryUrls / description
      Previous value: -"Three to five, first one a poster slide. URLs or local paths."New value: +"Three to five, first one a poster slide. URLs or local paths. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / longDescription / description
      Previous value: -"Two or three paragraphs, for the forms with room."New value: +"Two or three paragraphs, for the forms with room. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / makerBio / description
      Previous value: -"Asked for by launch platforms, not by plain directories. Max 160 characters."New value: +"Asked for by launch platforms, not by plain directories. Max 160 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / name / description
      Previous value: -"Exactly as it should appear in a listing."New value: +"Exactly as it should appear in a listing. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / oneLiner / description
      Previous value: -"A sentence that works as a meta description. Max 140 characters."New value: +"A sentence that works as a meta description. Max 140 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / pricing / description
      Previous value: -"What it costs, in a sentence a form can take."New value: +"What it costs, in a sentence a form can take. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / shortDescription / description
      Previous value: -"The paragraph most directory forms ask for. Max 260 characters."New value: +"The paragraph most directory forms ask for. Max 260 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
    • changedInput schema / properties / pack / properties / tagline / description
      Previous value: -"One line, no product name, no full stop. Max 60 characters."New value: +"One line, no product name, no full stop. Max 60 characters. Write it as the maker would: no em dashes, which read as machine-written and get the whole listing dismissed. Use a comma, a colon, a semicolon, brackets or a full stop instead."
  10. Changed2 schema fields changed
    • changedInput schema / properties / facts / properties / categories / description
      Previous value: -"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, a workspace with several of those means all of them. Tags: ai, b2b, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mobile, no-code, open-source, prelaunch, productivity, saas, web."New value: +"Every audience and form factor this product belongs to, not just the main one. A product is often several at once, and one missing tag is one directory it never hears about: a repository holding a browser extension and a web app is `extension` and `web`, and an open-source AI dev tool is `open-source`, `ai` and `dev`. Look at what the product actually ships before you answer: a manifest.json means `extension`, an ios or android target means `mobile`, a public repository means `open-source`, a workspace with several of those means all of them. Tags: ai, b2b, community, content, design, dev, directory, extension, free, hardware, indie, local, marketing, marketplace, mobile, no-code, open-source, prelaunch, productivity, saas, web."
    • changedInput schema / properties / facts / properties / categories / items / enum
      Previous value: -[
      -  "ai",
      -  "b2b",
      -  "content",
      -  "design",
      -  "dev",
      -  "directory",
      -  "extension",
      -  "free",
      -  "hardware",
      -  "indie",
      -  "local",
      -  "marketing",
      -  "marketplace",
      -  "mobile",
      -  "no-code",
      -  "open-source",
      -  "prelaunch",
      -  "productivity",
      -  "saas",
      -  "web"
      -]New value: +[
      +  "ai",
      +  "b2b",
      +  "community",
      +  "content",
      +  "design",
      +  "dev",
      +  "directory",
      +  "extension",
      +  "free",
      +  "hardware",
      +  "indie",
      +  "local",
      +  "marketing",
      +  "marketplace",
      +  "mobile",
      +  "no-code",
      +  "open-source",
      +  "prelaunch",
      +  "productivity",
      +  "saas",
      +  "web"
      +]
  11. First observed

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it persists facts (goal, budget, launchAt) to avoid re-asking, overwrites domainRating with measured data, and explains the dual image fields (logoUrl/logoFile). It also states that facts drive qualification and the pack is for pasting into forms. This is exceptionally transparent for a tool with no annotations.

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?

The description is long but front-loaded with the core purpose and packed with valuable guidance. It could be trimmed, but every sentence adds context about how to fill the pack or when to ask questions. The structure flows from purpose to workflow to specifics, making it usable.

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

Completeness5/5

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

For a complex create tool with nested objects and many fields, the description covers how to gather info, what to fill, what to leave, and when to defer to update_project. It also clarifies the facts/pack split and mentions run-order persistence. Nothing essential for calling it correctly is missing, even without an output schema.

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?

The description explains the roles of pack and facts ('Facts drive what it qualifies for; the pack is what you will paste into forms later') and clarifies the logoUrl/logoFile distinction. However, it doesn't individually describe each of the many nested properties; the schema covers most of those. Given the low schema coverage (40%), the description adds significant high-level meaning but doesn't compensate for every parameter.

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 opens with 'Store a product on the account,' a specific verb and resource, and immediately contrasts itself with update_project by saying 'come back with update_project.' It clearly defines the tool's role as creating a project and distinguishes it from its sibling.

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

Usage Guidelines5/5

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

It gives explicit instructions on when to use the tool: before asking the maker anything, gather info from visible sources like README and package metadata. It also specifies when to use update_project instead ('Fill in as much as you can, leave the rest, and come back with update_project') and advises asking about images early. This is concrete, actionable guidance.

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.