Tulimoa
Server Details
Find curated AI and MCP tools in the Tulimoa directory; submit yours free with a badge or for $5.
- Status
- Healthy
- Uptime
- 100.0% over 55 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- Repository
- Tulimoa/tulimoa-mcp
- GitHub Stars
- 1
- Server Listing
- Tulimoa MCP Server
TDQS
Scored across 5 tools
Each tool has a clearly distinct resource+action: create (submit_listing), read detail (get_listing), update (edit_listing), discovery (search_listings), and reference data (list_categories). There is no meaningful overlap, and descriptions explicitly sequence the read path (search then get) and reference (categories first).
All five tools follow a strict verb_noun snake_case pattern: edit_listing, get_listing, list_categories, search_listings, submit_listing. The naming is fully predictable and readable with no convention mixing.
Five tools is well-scoped for a directory server, cleanly covering the create/read/update/discover/reference surface without redundancy. Each tool earns its place with no filler.
The core lifecycle is largely covered: create, read, search, update, and category lookup. However, there is no delete/unpublish tool and no way to list the user's own pending submissions, which are minor but real gaps an agent would hit when managing owned listings.
Available Tools
5 toolsedit_listingEdit one of your own Tulimoa listingsAInspect
Update fields of a listing you own (by slug). You cannot change ownership or set review status. Any edit sends the listing back to admin review (status: pending) and it reappears publicly only after re-approval. Every listing needs a logo: pass logo_url to replace it (required if the listing has none yet). Requires a write-scoped Tulimoa login.
| Name | Required | Description | Default |
|---|---|---|---|
| mcp | No | ||
| url | No | ||
| name | No | ||
| slug | Yes | Slug of YOUR listing to edit (from submit_listing). | |
| tags | No | ||
| ai_usage | No | 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. | |
| category | No | ||
| gdpr_dpa | No | ||
| logo_url | No | 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. | |
| mcp_auth | No | ||
| x_handle | No | ||
| data_region | No | 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. | |
| launch_hook | No | ||
| mcp_docs_url | No | ||
| model_source | No | ||
| pricing_model | No | ||
| certifications | No | ||
| mcp_server_url | No | ||
| pricing_detail | No | ||
| agent_interfaces | No | ||
| hosting_provider | No | ||
| founder_x_handles | No | ||
| short_description | No | ||
| trains_on_customer_data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Listing id. |
| slug | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the review side effect (any edit resets status to pending and the listing disappears publicly until re-approved), the auth requirement (write-scoped login), and the logo precondition. It does not state whether omitted fields are preserved (partial vs. full replace), which is the one meaningful behavioral gap.
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?
Four tight sentences, front-loaded with the core action and key by slug, then the consequences and requirements. No filler, though the logo sentence duplicates schema text and could be trimmed.
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?
For a 24-parameter mutation with low schema coverage, the description covers the important behavioral risks (review reset, auth, logo requirement) but leaves the bulk of the parameter surface unexplained. Output schema exists, so return values need not be described, which keeps this at an adequate rather than deficient level.
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 only 17% across 24 parameters, so the description needs to compensate and largely does not. It restates the slug and logo_url rules already present in the schema and adds the ownership/review constraints, but says nothing about the other ~20 fields (ai_usage, category, pricing_model, etc.).
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 ('Update fields of a listing you own (by slug)') and scopes it to owned listings, which cleanly separates it from submit_listing (create), get_listing (read), and search_listings. The identification key (slug) is named up front.
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 clear context for use: you must own the listing, you cannot change ownership or review status, and a write-scoped login is required. It does not explicitly name sibling tools as alternatives (e.g. use submit_listing for a new listing), so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listingGet one SaaS listingAInspect
Fetch full detail of a single Tulimoa listing by its slug: long description, how it uses AI (ai_usage), features, use cases, integrations, pricing detail, data region and EU hosting, model source, certifications, and links. Use after search_listings when the user wants depth on a specific tool.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The listing's URL slug, e.g. 'acme-crm'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| listing | Yes | Full listing row (detail projection, see DETAIL_SELECT). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Fetch' plus the enumerated read-only payload (description, ai_usage, features, pricing, certifications, links) makes the read-only nature clear and characterizes the response. However, it says nothing about behavior on an unknown/expired slug, permissions, or rate limits, which matters for a tool with zero annotation coverage.
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?
Two sentences, front-loaded with the action and lookup key, then the payload contents, then the routing hint. The middle field enumeration is a bit list-heavy for a tool whose output schema already defines the payload, but nothing is truly wasted.
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?
For a single-record read tool with an output schema and no annotations, the definition covers what it returns and when to call it, so an agent has enough to invoke it correctly. It omits error/miss behavior and any auth expectations, which is a modest remaining gap.
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 'slug' parameter is already documented with format constraints and an example in the schema. The description restates the identifier as 'slug' but adds no format, casing, or resolution guidance beyond what the schema provides, so the baseline of 3 applies.
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 ('Fetch full detail of a single Tulimoa listing') and pins the lookup key ('by its slug'). It is distinguishable from the plural sibling search_listings without opening any 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?
Explicitly routes the agent: 'Use after search_listings when the user wants depth on a specific tool.' That names the alternative and the condition that selects this tool. It stops short of stating when NOT to use it (e.g. for bulk retrieval), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesList directory categoriesAInspect
List the category ids and labels used to classify Tulimoa listings. Call this first when you need a valid category value for search_listings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the output contains ids and labels and the use case, which is sufficient for a read-only list operation. Could explicitly note it is safe/idempotent but not required.
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?
Two concise sentences, front-loaded with purpose then usage. No superfluous words.
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 no parameters and an output schema provided, the description covers all needed context: why to use it and what it returns.
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?
There are no parameters, so baseline is 4. The description adds value by specifying the output contents and usage context.
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 clearly states the tool lists category ids and labels for Tulimoa listings. It uses a specific verb and resource, and the sibling tools are all listing-related, so no ambiguity.
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?
Explicitly instructs to call first when a valid category value is needed for search_listings. This provides clear when and why to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsSearch SaaS listingsAInspect
Find SaaS tools in the Tulimoa directory that an AI agent or team can plug into. Discover tools by topic, category, pricing, MCP support, or EU hosting. Returns only approved, published listings. Use this for any 'find/recommend a tool for X' request, then call get_listing for full detail on a specific result.
| Name | Required | Description | Default |
|---|---|---|---|
| mcp | No | true = only tools that expose their own MCP server. | |
| sort | No | Result order. Default: popular. | |
| limit | No | Max results (1-50, default 20). | |
| query | No | Free-text terms matched against the listing name and short description. | |
| eu_only | No | true = only tools whose company country is in the EU. | |
| category | No | Restrict to one category id. Call list_categories for valid ids. | |
| pricing_model | No | Restrict to a pricing model. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of results returned. |
| results | Yes | Lean listing rows; call get_listing(slug) for full detail. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that results are limited to approved, published listings and supports various filters. However, it does not mention default behavior (e.g., default sort or limit), pagination, or edge cases like empty queries. Some behavioral context is given but not exhaustive.
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 description is efficient with three concise sentences. It front-loads the purpose, lists available filters, and ends with clear usage guidance. Every sentence adds value with no redundancy.
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?
The description covers the main purpose, filters, and next steps for a search tool with 7 optional parameters and an output schema. It lacks details on default behavior (covered in schema) but is otherwise complete for guiding an AI agent. Minor omission of explicit mention that all parameters are optional, but schema clarifies.
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 coverage is 100% with detailed descriptions for all 7 parameters, including enums. The description adds context by grouping parameters (e.g., 'topic, category, pricing, MCP support, or EU hosting') but does not provide significant additional meaning beyond the schema. Baseline 3 is appropriate.
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 clearly states the tool finds SaaS tools in the Tulimoa directory by various filters (topic, category, pricing, MCP, EU hosting) and returns approved listings. It explicitly distinguishes itself from the sibling get_listing by advising to call it for full detail on a result.
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 description explicitly states to use this tool for 'find/recommend a tool for X' requests and advises the next step of calling get_listing for details. This provides clear context and differentiation from editing, submitting, or listing categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_listingSubmit an AI or MCP tool to the Tulimoa directoryAInspect
Create a new listing in the Tulimoa directory (AI and MCP software with its own website) on behalf of the authenticated user. It starts as 'pending' and is reviewed by hand. Required: logo_url (a public image URL, e.g. the company's square icon) and ai_usage (how the software uses AI or what agents can do with it). Choose how it goes live with visibility: 'badge' (free, Tulimoa badge on the website, reviewed within 7 days) or 'launch' ($5 one-time, no badge, reviewed first, refunded if rejected). For 'launch' ask the user for consent and pass withdrawal_consent: true; the result has a checkout_url the user opens to pay. For 'badge' the result has the badge HTML to embed. A website that is already listed cannot be submitted again. Use list_categories first to pick a valid category id. Requires a write-scoped Tulimoa login.
| Name | Required | Description | Default |
|---|---|---|---|
| mcp | Yes | true = this tool exposes its own MCP server. | |
| url | Yes | Public homepage URL (https). | |
| name | Yes | Product/company name (max 60 chars). | |
| tags | No | Optional descriptive tags (max 8). | |
| country | Yes | ISO-3166-1 alpha-2 country code of the company, e.g. DE. | |
| ai_usage | Yes | 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. | |
| category | Yes | One category id. Call list_categories for valid ids. | |
| gdpr_dpa | No | Optional: a GDPR data processing agreement (DPA) is available. | |
| logo_url | Yes | Required. 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. | |
| mcp_auth | No | Only if mcp is true: how agents connect (oauth, api). Empty = no auth. | |
| x_handle | No | Optional company X handle, e.g. @acme. | |
| visibility | Yes | 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. | |
| data_region | No | 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. | |
| launch_hook | No | Launch package with welcome post: one sentence why the tool matters (max 140 chars, English). | |
| mcp_docs_url | No | Only if mcp is true: link to the MCP docs. | |
| model_source | No | Optional: which AI models (own, open-weight, provider, mixed, none). | |
| pricing_model | Yes | Pricing model (required): free | freemium | paid | lifetime. | |
| x_post_opt_in | No | Launch package only: a free welcome post from @gettulimoa on X after approval. Needs launch_hook and at least one X handle. | |
| certifications | No | Optional: soc2, iso27001, hipaa. | |
| mcp_server_url | No | Only if mcp is true: endpoint URL of the MCP server. | |
| pricing_detail | No | Optional price detail, e.g. 'from $10/month'. | |
| agent_interfaces | No | Optional: other ways agents can use it. | |
| hosting_provider | No | Optional hosting provider and location, e.g. 'Hetzner, Falkenstein'. | |
| founder_x_handles | No | Optional founder X handles (max 4). | |
| short_description | Yes | One-line pitch (max 300 chars). | |
| withdrawal_consent | No | 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. | |
| trains_on_customer_data | No | Optional: trains on customer data (no, opt-out, yes). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Listing id. |
| slug | Yes | Final slug (may carry a conflict suffix). |
| status | Yes | |
| next_step | Yes | What the user has to do now. |
| badge_html | No | Badge only: HTML for dark backgrounds (light) or light backgrounds (dark). |
| manage_url | Yes | Dashboard page for status, badge check and payment. |
| visibility | Yes | |
| checkout_url | No | Launch package only: opens the Polar checkout (Tulimoa login needed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: the listing starts as 'pending' and is reviewed by hand, badge listings go offline if the badge is missing for 14 days, launch listings are reviewed first and auto-refunded if rejected, and withdrawal consent must be obtained before setting withdrawal_consent. It also previews the outputs (checkout_url for launch, badge HTML for badge), which is genuinely useful even alongside an output schema.
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?
Purpose, required fields, visibility modes, consent, outputs, duplicate rule, category lookup, and auth are all front-loaded in a single dense paragraph with almost no filler. It runs long, and the visibility pricing/review details could be trimmed, but nearly every sentence earns its place.
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?
For a 27-parameter, 10-required creation tool, the description covers the decisions an agent cannot infer from structured fields: auth scope, review/refund flow, consent requirement, duplicate handling, and prerequisites. With an output schema present, return-value explanation is correctly left minimal.
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 adds cross-field semantics the schema only states per-parameter: consent must be asked before passing withdrawal_consent, and logo_url/ai_usage are called out as mandatory. However, it only spotlights a fraction of the 27 parameters, relying on the schema for the rest.
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 opens with a specific verb+resource+scope: 'Create a new listing in the Tulimoa directory ... on behalf of the authenticated user.' It implicitly distinguishes itself from edit_listing by stating that 'a website that is already listed cannot be submitted again', letting an agent separate creation from modification 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?
It gives explicit routing ('Use list_categories first to pick a valid category id'), a when-not condition (already-listed websites cannot be resubmitted), prerequisites ('Requires a write-scoped Tulimoa login'), and a decision rule between the two visibility modes with their cost and review behavior. Little is left to inference.
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
- Changed
edit_listing15 fields changed- added
Input schema / properties / agent_interfacesAdded value: +{ + "items": { + "enum": [ + "api", + "cli", + "sdk", + "webhooks" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" +} - added
Input schema / properties / ai_usageAdded 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" +} - added
Input schema / properties / certificationsAdded value: +{ + "items": { + "enum": [ + "soc2", + "iso27001", + "hipaa" + ], + "type": "string" + }, + "maxItems": 3, + "type": "array" +} - added
Input schema / properties / data_regionAdded 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" +} - added
Input schema / properties / founder_x_handlesAdded value: +{ + "items": { + "maxLength": 40, + "type": "string" + }, + "maxItems": 4, + "type": "array" +} - added
Input schema / properties / gdpr_dpaAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / hosting_providerAdded value: +{ + "maxLength": 60, + "type": "string" +} - added
Input schema / properties / launch_hookAdded value: +{ + "maxLength": 140, + "type": "string" +} - added
Input schema / properties / mcp_authAdded value: +{ + "items": { + "enum": [ + "oauth", + "api" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" +} - added
Input schema / properties / mcp_docs_urlAdded value: +{ + "format": "uri", + "type": "string" +} - added
Input schema / properties / mcp_server_urlAdded value: +{ + "format": "uri", + "type": "string" +} - added
Input schema / properties / model_sourceAdded value: +{ + "enum": [ + "own", + "open-weight", + "provider", + "mixed", + "none" + ], + "type": "string" +} - added
Input schema / properties / pricing_detailAdded value: +{ + "maxLength": 400, + "type": "string" +} - added
Input schema / properties / trains_on_customer_dataAdded value: +{ + "enum": [ + "no", + "opt-out", + "yes" + ], + "type": "string" +} - added
Input schema / properties / x_handleAdded value: +{ + "maxLength": 40, + "type": "string" +}
- Changed
submit_listing25 fields changed- added
Input schema / properties / agent_interfacesAdded value: +{ + "description": "Optional: other ways agents can use it.", + "items": { + "enum": [ + "api", + "cli", + "sdk", + "webhooks" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" +} - added
Input schema / properties / ai_usageAdded 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" +} - added
Input schema / properties / certificationsAdded value: +{ + "description": "Optional: soc2, iso27001, hipaa.", + "items": { + "enum": [ + "soc2", + "iso27001", + "hipaa" + ], + "type": "string" + }, + "maxItems": 3, + "type": "array" +} - added
Input schema / properties / data_regionAdded 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" +} - added
Input schema / properties / founder_x_handlesAdded value: +{ + "description": "Optional founder X handles (max 4).", + "items": { + "maxLength": 40, + "type": "string" + }, + "maxItems": 4, + "type": "array" +} - added
Input schema / properties / gdpr_dpaAdded value: +{ + "description": "Optional: a GDPR data processing agreement (DPA) is available.", + "type": "boolean" +} - added
Input schema / properties / hosting_providerAdded value: +{ + "description": "Optional hosting provider and location, e.g. 'Hetzner, Falkenstein'.", + "maxLength": 60, + "type": "string" +} - added
Input schema / properties / launch_hookAdded value: +{ + "description": "Launch package with welcome post: one sentence why the tool matters (max 140 chars, English).", + "maxLength": 140, + "type": "string" +} - added
Input schema / properties / mcp_authAdded 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" +} - added
Input schema / properties / mcp_docs_urlAdded value: +{ + "description": "Only if mcp is true: link to the MCP docs.", + "format": "uri", + "type": "string" +} - added
Input schema / properties / mcp_server_urlAdded value: +{ + "description": "Only if mcp is true: endpoint URL of the MCP server.", + "format": "uri", + "type": "string" +} - added
Input schema / properties / model_sourceAdded value: +{ + "description": "Optional: which AI models (own, open-weight, provider, mixed, none).", + "enum": [ + "own", + "open-weight", + "provider", + "mixed", + "none" + ], + "type": "string" +} - added
Input schema / properties / pricing_detailAdded value: +{ + "description": "Optional price detail, e.g. 'from $10/month'.", + "maxLength": 400, + "type": "string" +} - added
Input schema / properties / trains_on_customer_dataAdded value: +{ + "description": "Optional: trains on customer data (no, opt-out, yes).", + "enum": [ + "no", + "opt-out", + "yes" + ], + "type": "string" +} - added
Input schema / properties / visibilityAdded 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" +} - added
Input schema / properties / withdrawal_consentAdded 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" +} - added
Input schema / properties / x_handleAdded value: +{ + "description": "Optional company X handle, e.g. @acme.", + "maxLength": 40, + "type": "string" +} - added
Input schema / properties / x_post_opt_inAdded 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" +} - changed
Input schema / requiredPrevious 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" +] - added
Output schema / properties / badge_htmlAdded 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" +} - added
Output schema / properties / checkout_urlAdded value: +{ + "description": "Launch package only: opens the Polar checkout (Tulimoa login needed).", + "type": "string" +} - added
Output schema / properties / manage_urlAdded value: +{ + "description": "Dashboard page for status, badge check and payment.", + "type": "string" +} - added
Output schema / properties / next_stepAdded value: +{ + "description": "What the user has to do now.", + "type": "string" +} - added
Output schema / properties / visibilityAdded value: +{ + "enum": [ + "badge", + "launch" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "id", - "slug", - "status" -]New value: +[ + "id", + "slug", + "status", + "visibility", + "next_step", + "manage_url" +]
2 tool updates
- Changed
edit_listing1 field changed- added
Input schema / properties / logo_urlAdded 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" +}
- Changed
submit_listing2 fields changed- added
Input schema / properties / logo_urlAdded value: +{ + "description": "Required. 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.", + "format": "uri", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "name", - "url", - "short_description", - "country", - "category", - "mcp", - "pricing_model" -]New value: +[ + "name", + "url", + "short_description", + "country", + "category", + "mcp", + "pricing_model", + "logo_url" +]
5 tool updates
- Changed
edit_listing2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output 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" +}
- Changed
get_listing2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "listing": { + "additionalProperties": {}, + "description": "Full listing row (detail projection, see DETAIL_SELECT).", + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "required": [ + "slug", + "name" + ], + "type": "object" + } + }, + "required": [ + "listing" + ], + "type": "object" +}
- Changed
list_categories2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "categories": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "labelDe": { + "type": "string" + } + }, + "required": [ + "id", + "label", + "labelDe" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "categories" + ], + "type": "object" +}
- Changed
search_listings2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "count": { + "description": "Number of results returned.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "results": { + "description": "Lean listing rows; call get_listing(slug) for full detail.", + "items": { + "additionalProperties": {}, + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "country": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "pricing_model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "short_description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "slug": { + "type": "string" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "slug", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "count", + "results" + ], + "type": "object" +}
- Changed
submit_listing2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output 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": { + "description": "Final slug (may carry a conflict suffix).", + "type": "string" + }, + "status": { + "const": "pending", + "type": "string" + } + }, + "required": [ + "id", + "slug", + "status" + ], + "type": "object" +}
3 tool updates
- Changed
edit_listing1 field changed- changed
Input schema / properties / category / enumPrevious 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" +]
- Changed
search_listings1 field changed- changed
Input schema / properties / category / enumPrevious 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" +]
- Changed
submit_listing3 fields changed- changed
Input schema / properties / category / enumPrevious 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" +] - changed
Input schema / properties / pricing_model / descriptionPrevious value: -"Optional: free | freemium | paid | lifetime."New value: +"Pricing model (required): free | freemium | paid | lifetime." - changed
Input schema / requiredPrevious value: -[ - "name", - "url", - "short_description", - "country", - "category", - "mcp" -]New value: +[ + "name", + "url", + "short_description", + "country", + "category", + "mcp", + "pricing_model" +]
2 tool updates
- Added
edit_listing - Added
submit_listing
3 tool updates
- First observed
get_listing - First observed
list_categories - First observed
search_listings
Related MCP Connectors
AI tool directory MCP server, live since July 2026. Tools, agents, models, companies, services.
Search a curated directory of AI tools, AI agents and MCP servers by task, pricing and platform.
Independent directory of agentic AI tools โ search, compare & recommend via MCP. Read-only.
Search a curated directory of AI tools and MCP servers for law firms. Read-only, free, no auth.
Related MCP Servers
- AlicenseAqualityCmaintenanceSearch and discover 3,500+ AI tools, MCP servers, and Claude Skills with community ratings. Find the best tools by category, compatibility, and real user reviews.370 npmMIT

@neurynae/toolcairn-mcpofficial
AlicenseNot gradedqualityCmaintenanceMCP tool discovery for AI agents โ find, compare, verify tools across 35+ registries.3MIT- AlicenseNot gradedqualityFmaintenanceTool search engine for AI agents. One API call to discover the best MCP server for any task. 900+ services indexed with 4-dimensional value ranking.MIT
- FlicenseNot gradedqualityDmaintenanceProvides 95 free tools and 22 workflows for AI agents via MCP, no API key required, covering versatile functionalities.2-
Glama MCP Gateway
Add one secure layer between your agents and this server.