addedInput schema / properties / agent_interfaces
Added value: +{
+ "description": "Optional: other ways agents can use it.",
+ "items": {
+ "enum": [
+ "api",
+ "cli",
+ "sdk",
+ "webhooks"
+ ],
+ "type": "string"
+ },
+ "maxItems": 4,
+ "type": "array"
+}
addedInput schema / properties / ai_usage
Added value: +{
+ "description": "Required, 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: +{
+ "description": "Optional: soc2, iso27001, hipaa.",
+ "items": {
+ "enum": [
+ "soc2",
+ "iso27001",
+ "hipaa"
+ ],
+ "type": "string"
+ },
+ "maxItems": 3,
+ "type": "array"
+}
addedInput schema / properties / data_region
Added value: +{
+ "description": "Optional. 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: +{
+ "description": "Optional founder X handles (max 4).",
+ "items": {
+ "maxLength": 40,
+ "type": "string"
+ },
+ "maxItems": 4,
+ "type": "array"
+}
addedInput schema / properties / gdpr_dpa
Added value: +{
+ "description": "Optional: a GDPR data processing agreement (DPA) is available.",
+ "type": "boolean"
+}
addedInput schema / properties / hosting_provider
Added value: +{
+ "description": "Optional hosting provider and location, e.g. 'Hetzner, Falkenstein'.",
+ "maxLength": 60,
+ "type": "string"
+}
addedInput schema / properties / launch_hook
Added value: +{
+ "description": "Launch package with welcome post: one sentence why the tool matters (max 140 chars, English).",
+ "maxLength": 140,
+ "type": "string"
+}
addedInput schema / properties / mcp_auth
Added value: +{
+ "description": "Only if mcp is true: how agents connect (oauth, api). Empty = no auth.",
+ "items": {
+ "enum": [
+ "oauth",
+ "api"
+ ],
+ "type": "string"
+ },
+ "maxItems": 2,
+ "type": "array"
+}
addedInput schema / properties / mcp_docs_url
Added value: +{
+ "description": "Only if mcp is true: link to the MCP docs.",
+ "format": "uri",
+ "type": "string"
+}
addedInput schema / properties / mcp_server_url
Added value: +{
+ "description": "Only if mcp is true: endpoint URL of the MCP server.",
+ "format": "uri",
+ "type": "string"
+}
addedInput schema / properties / model_source
Added value: +{
+ "description": "Optional: which AI models (own, open-weight, provider, mixed, none).",
+ "enum": [
+ "own",
+ "open-weight",
+ "provider",
+ "mixed",
+ "none"
+ ],
+ "type": "string"
+}
addedInput schema / properties / pricing_detail
Added value: +{
+ "description": "Optional price detail, e.g. 'from $10/month'.",
+ "maxLength": 400,
+ "type": "string"
+}
addedInput schema / properties / trains_on_customer_data
Added value: +{
+ "description": "Optional: trains on customer data (no, opt-out, yes).",
+ "enum": [
+ "no",
+ "opt-out",
+ "yes"
+ ],
+ "type": "string"
+}
addedInput schema / properties / visibility
Added value: +{
+ "description": "How the listing goes live (required). 'badge' = free: embed the Tulimoa badge on the product website, reviewed within 7 days; if the badge is missing for 14 days the listing goes offline again. 'launch' = $5 one-time launch package: no badge needed, reviewed first, optional welcome post from @gettulimoa on X, refunded automatically if rejected. Ask the user which one they want.",
+ "enum": [
+ "badge",
+ "launch"
+ ],
+ "type": "string"
+}
addedInput schema / properties / withdrawal_consent
Added value: +{
+ "description": "Required (true) for visibility 'launch'. Only set it after the user agrees: Tulimoa starts the review right away, the right of withdrawal ends once the listing is live, and a rejected listing gets the $5 back automatically.",
+ "type": "boolean"
+}
addedInput schema / properties / x_handle
Added value: +{
+ "description": "Optional company X handle, e.g. @acme.",
+ "maxLength": 40,
+ "type": "string"
+}
addedInput schema / properties / x_post_opt_in
Added value: +{
+ "description": "Launch package only: a free welcome post from @gettulimoa on X after approval. Needs launch_hook and at least one X handle.",
+ "type": "boolean"
+}
changedInput schema / required
Previous value: -[
- "name",
- "url",
- "short_description",
- "country",
- "category",
- "mcp",
- "pricing_model",
- "logo_url"
-]New value: +[
+ "name",
+ "url",
+ "short_description",
+ "country",
+ "category",
+ "mcp",
+ "pricing_model",
+ "logo_url",
+ "ai_usage",
+ "visibility"
+]
addedOutput schema / properties / badge_html
Added value: +{
+ "additionalProperties": false,
+ "description": "Badge only: HTML for dark backgrounds (light) or light backgrounds (dark).",
+ "properties": {
+ "dark": {
+ "type": "string"
+ },
+ "light": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "light",
+ "dark"
+ ],
+ "type": "object"
+}
addedOutput schema / properties / checkout_url
Added value: +{
+ "description": "Launch package only: opens the Polar checkout (Tulimoa login needed).",
+ "type": "string"
+}
addedOutput schema / properties / manage_url
Added value: +{
+ "description": "Dashboard page for status, badge check and payment.",
+ "type": "string"
+}
addedOutput schema / properties / next_step
Added value: +{
+ "description": "What the user has to do now.",
+ "type": "string"
+}
addedOutput schema / properties / visibility
Added value: +{
+ "enum": [
+ "badge",
+ "launch"
+ ],
+ "type": "string"
+}
changedOutput schema / required
Previous value: -[
- "id",
- "slug",
- "status"
-]New value: +[
+ "id",
+ "slug",
+ "status",
+ "visibility",
+ "next_step",
+ "manage_url"
+]