Koskamo

NeedAnAI MCP

An official MCP server providing programmatic access to the NeedAnAI directory of 15,000+ AI tools. It enables agents to search for tools, retrieve detailed profiles including pricing and alternatives, compare tools side-by-side, get task-based recommendations, and manage watches or submissions. The server supports both free read-only access and authenticated actions like watching for status changes.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

NeedAnAI MCP logo, by NeedAnAIVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-02Operated by NeedAnAI
You need:Reads are free and need no accountTools marked key need a free API key sent as Authorization: Bearer nai_…
MCP endpoint (Streamable HTTP)
https://mcp.needanai.com/mcp
Vendor documentation

What you can do with it

  • Search for AI tools by task, category, or pricing model
  • Get detailed profiles, pricing history, and alternatives for specific tools
  • Compare multiple tools side-by-side based on attributes
  • Recommend tools for specific tasks within a budget

Source and maintenance

Vendor evidenceRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
com.needanai/catalog 1.0.0
MCP protocol
2025-06-18
Tools
14 advertised
Resources
0 advertised
Resource templates
1 advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

NeedAnAI is a directory of 15,000+ AI tools with pricing, pros/cons, FAQs, alternatives and an automated liveness scanner. Start with search_tools or recommend_for_task; use get_tool for detail and find_alternatives / compare_tools to choose. Every result carries a freshness label: fresh (site confirmed alive ≤30 days ago), aging (≤90), stale, or unknown. Tell users the date when it matters. Sponsored placements are always in a separate "sponsored" block with a disclosure and never mixed into ranked hits. Read tools need no key. watch_tool, submit_tool and export_tools need a free API key from https://needanai.com/profile?tab=api-keys sent as "Authorization: Bearer nai_…".

Tools

14 advertised

search_tools — Search AI tools
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the NeedAnAI catalogue of 15,000+ AI tools by free text, pricing model, category or task. Returns ranked hits with pricing, status, freshness (when the site was last confirmed alive) and canonical URLs, plus facet counts and a separate, labelled sponsored block. Use list_taxonomy for valid category and task slugs.

search_tools input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "page": {
      "type": "integer",
      "maximum": 400,
      "minimum": 1,
      "description": "1-based page number."
    },
    "sort": {
      "enum": [
        "relevance",
        "recent"
      ],
      "type": "string"
    },
    "task": {
      "type": "string",
      "maxLength": 120,
      "description": "Task slug from list_taxonomy."
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "description": "Free text, e.g. \"video editing\" or a tool name. Empty lists the catalogue."
    },
    "perPage": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Results per page, max 25."
    },
    "pricing": {
      "type": "array",
      "items": {
        "enum": [
          "free",
          "freemium",
          "paid",
          "subscription",
          "free-trial",
          "contact"
        ],
        "type": "string"
      },
      "maxItems": 6,
      "description": "Restrict to these pricing models."
    },
    "category": {
      "type": "string",
      "maxLength": 120,
      "description": "Category slug from list_taxonomy."
    }
  },
  "additionalProperties": false
}
search_tools output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query",
    "hits",
    "total",
    "page",
    "pages",
    "perPage",
    "facets",
    "sponsored"
  ],
  "properties": {
    "hits": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "summary",
          "pricingType",
          "categories",
          "tasks",
          "url",
          "websiteUrl",
          "siteStatus",
          "freshness"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "tasks": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": "string"
          },
          "freshness": {
            "type": "object",
            "required": [
              "label",
              "basis",
              "at",
              "ageDays"
            ],
            "properties": {
              "at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "basis": {
                "enum": [
                  "verified",
                  "checked",
                  "none"
                ],
                "type": "string"
              },
              "label": {
                "enum": [
                  "fresh",
                  "aging",
                  "stale",
                  "unknown"
                ],
                "type": "string",
                "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
              },
              "ageDays": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "additionalProperties": {}
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "siteStatus": {
            "type": "string"
          },
          "websiteUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "pricingType": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "page": {
      "type": "number"
    },
    "pages": {
      "type": "number"
    },
    "query": {
      "type": "string"
    },
    "total": {
      "type": "number"
    },
    "facets": {
      "type": "object",
      "required": [
        "pricing",
        "categories",
        "tasks"
      ],
      "properties": {
        "tasks": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "number"
          }
        },
        "pricing": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "number"
          }
        },
        "categories": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "number"
          }
        }
      },
      "additionalProperties": {}
    },
    "perPage": {
      "type": "number"
    },
    "sponsored": {
      "type": "object",
      "required": [
        "disclosure",
        "items"
      ],
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "slug",
              "name",
              "summary",
              "pricingType",
              "categories",
              "tasks",
              "url",
              "websiteUrl",
              "siteStatus",
              "freshness"
            ],
            "properties": {
              "url": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "tasks": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "summary": {
                "type": "string"
              },
              "freshness": {
                "type": "object",
                "required": [
                  "label",
                  "basis",
                  "at",
                  "ageDays"
                ],
                "properties": {
                  "at": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "basis": {
                    "enum": [
                      "verified",
                      "checked",
                      "none"
                    ],
                    "type": "string"
                  },
                  "label": {
                    "enum": [
                      "fresh",
                      "aging",
                      "stale",
                      "unknown"
                    ],
                    "type": "string",
                    "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
                  },
                  "ageDays": {
                    "type": [
                      "number",
                      "null"
                    ]
                  }
                },
                "additionalProperties": {}
              },
              "categories": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "siteStatus": {
                "type": "string"
              },
              "websiteUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pricingType": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          }
        },
        "disclosure": {
          "type": "string",
          "description": "Always present. Sponsored items are never mixed into ranked results."
        }
      },
      "additionalProperties": {}
    }
  },
  "additionalProperties": {}
}
search_tools annotations
{
  "title": "Search AI tools",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_tool — Get a tool profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full profile of one tool by slug: description, pricing model and details (with when pricing was last checked), pricing history, pros, cons, FAQs, categories, tasks, media, site status, freshness and up to five alternatives. Ends with a provenance line.

get_tool input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,190}$",
      "description": "Tool slug as it appears in https://needanai.com/tool/<slug>"
    }
  },
  "additionalProperties": false
}
get_tool output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug",
    "name",
    "summary",
    "description",
    "websiteUrl",
    "pricing",
    "pros",
    "cons",
    "faqs",
    "categories",
    "tasks",
    "tags",
    "jobs",
    "media",
    "flags",
    "launchDate",
    "siteStatus",
    "freshness",
    "source",
    "alternatives"
  ],
  "properties": {
    "cons": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "faqs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "question",
          "answer"
        ],
        "properties": {
          "answer": {
            "type": "string"
          },
          "question": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "jobs": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "name": {
      "type": "string"
    },
    "pros": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "slug": {
      "type": "string"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "flags": {
      "type": "object",
      "required": [
        "trending",
        "verified"
      ],
      "properties": {
        "trending": {
          "type": "boolean"
        },
        "verified": {
          "type": "boolean"
        }
      },
      "additionalProperties": {}
    },
    "media": {
      "type": "object",
      "required": [
        "logoUrl",
        "screenshotUrl"
      ],
      "properties": {
        "logoUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "screenshotUrl": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": {}
    },
    "tasks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "slug",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "source": {
      "type": "object",
      "required": [
        "url",
        "checkedAt",
        "verifiedAt",
        "publishedAt"
      ],
      "properties": {
        "url": {
          "type": "string"
        },
        "checkedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "verifiedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "publishedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": {}
    },
    "pricing": {
      "type": "object",
      "required": [
        "type",
        "label",
        "details",
        "checkedAt"
      ],
      "properties": {
        "type": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "details": {
          "type": "string"
        },
        "checkedAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": {}
    },
    "summary": {
      "type": "string"
    },
    "freshness": {
      "type": "object",
      "required": [
        "label",
        "basis",
        "at",
        "ageDays"
      ],
      "properties": {
        "at": {
          "type": [
            "string",
            "null"
          ]
        },
        "basis": {
          "enum": [
            "verified",
            "checked",
            "none"
          ],
          "type": "string"
        },
        "label": {
          "enum": [
            "fresh",
            "aging",
            "stale",
            "unknown"
          ],
          "type": "string",
          "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
        },
        "ageDays": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "additionalProperties": {}
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "slug",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "launchDate": {
      "type": [
        "string",
        "null"
      ]
    },
    "siteStatus": {
      "type": "string"
    },
    "websiteUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "description": {
      "type": "string"
    },
    "alternatives": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "summary",
          "pricingType",
          "categories",
          "tasks",
          "url",
          "websiteUrl",
          "siteStatus",
          "freshness"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "tasks": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": "string"
          },
          "freshness": {
            "type": "object",
            "required": [
              "label",
              "basis",
              "at",
              "ageDays"
            ],
            "properties": {
              "at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "basis": {
                "enum": [
                  "verified",
                  "checked",
                  "none"
                ],
                "type": "string"
              },
              "label": {
                "enum": [
                  "fresh",
                  "aging",
                  "stale",
                  "unknown"
                ],
                "type": "string",
                "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
              },
              "ageDays": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "additionalProperties": {}
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "siteStatus": {
            "type": "string"
          },
          "websiteUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "pricingType": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "pricingHistory": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "capturedAt",
          "type",
          "details"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "details": {
            "type": "string"
          },
          "capturedAt": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": {}
}
get_tool annotations
{
  "title": "Get a tool profile",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
find_alternatives — Find alternatives
Advertised by the server during the last successful anonymous check.
Advertised read-only

Alternatives to a tool, ranked by freshness, profile completeness, curation and how many other tools list them as an alternative. Each entry carries a rationale. Optionally restrict to the same pricing model.

find_alternatives input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,190}$",
      "description": "Tool slug as it appears in https://needanai.com/tool/<slug>"
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1
    },
    "samePricing": {
      "type": "boolean",
      "description": "Only alternatives with the same pricing model."
    }
  },
  "additionalProperties": false
}
find_alternatives output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "tool",
    "alternatives"
  ],
  "properties": {
    "tool": {
      "type": "object",
      "required": [
        "slug",
        "name",
        "summary",
        "pricingType",
        "categories",
        "tasks",
        "url",
        "websiteUrl",
        "siteStatus",
        "freshness"
      ],
      "properties": {
        "url": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "tasks": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "summary": {
          "type": "string"
        },
        "freshness": {
          "type": "object",
          "required": [
            "label",
            "basis",
            "at",
            "ageDays"
          ],
          "properties": {
            "at": {
              "type": [
                "string",
                "null"
              ]
            },
            "basis": {
              "enum": [
                "verified",
                "checked",
                "none"
              ],
              "type": "string"
            },
            "label": {
              "enum": [
                "fresh",
                "aging",
                "stale",
                "unknown"
              ],
              "type": "string",
              "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
            },
            "ageDays": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "additionalProperties": {}
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "siteStatus": {
          "type": "string"
        },
        "websiteUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "pricingType": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "alternatives": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "summary",
          "pricingType",
          "categories",
          "tasks",
          "url",
          "websiteUrl",
          "siteStatus",
          "freshness",
          "score",
          "rationale"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "tasks": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": "string"
          },
          "freshness": {
            "type": "object",
            "required": [
              "label",
              "basis",
              "at",
              "ageDays"
            ],
            "properties": {
              "at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "basis": {
                "enum": [
                  "verified",
                  "checked",
                  "none"
                ],
                "type": "string"
              },
              "label": {
                "enum": [
                  "fresh",
                  "aging",
                  "stale",
                  "unknown"
                ],
                "type": "string",
                "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
              },
              "ageDays": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "additionalProperties": {}
          },
          "rationale": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "siteStatus": {
            "type": "string"
          },
          "websiteUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "pricingType": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": {}
}
find_alternatives annotations
{
  "title": "Find alternatives",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_tools — Compare tools
Advertised by the server during the last successful anonymous check.
Advertised read-only

Side-by-side comparison of 2–5 tools: pricing, summary, categories, tasks, pros, cons, site status, freshness, flags and launch date.

compare_tools input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slugs"
  ],
  "properties": {
    "slugs": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,190}$",
        "description": "Tool slug as it appears in https://needanai.com/tool/<slug>"
      },
      "maxItems": 5,
      "minItems": 2,
      "description": "2 to 5 tool slugs."
    }
  },
  "additionalProperties": false
}
compare_tools output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "tools",
    "rows",
    "missing"
  ],
  "properties": {
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "attribute",
          "values"
        ],
        "properties": {
          "values": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "attribute": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    },
    "tools": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "url",
          "websiteUrl"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "websiteUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {}
      }
    },
    "missing": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": {}
}
compare_tools annotations
{
  "title": "Compare tools",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
recommend_for_task — Recommend tools for a task
Advertised by the server during the last successful anonymous check.
Advertised read-only

Given a job to be done ("create a logo", "transcribe meetings") and an optional budget, returns the best-fitting tools with an explicit rationale per recommendation. Resolves known task slugs first, then falls back to free-text search.

recommend_for_task input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "task"
  ],
  "properties": {
    "task": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2,
      "description": "What the user wants to do, e.g. \"create a logo\", or a task slug."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1
    },
    "budget": {
      "enum": [
        "free",
        "freemium",
        "paid",
        "any"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
recommend_for_task output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "task",
    "matchedTask",
    "budget",
    "recommendations",
    "considered"
  ],
  "properties": {
    "task": {
      "type": "string"
    },
    "budget": {
      "type": "string"
    },
    "considered": {
      "type": "number"
    },
    "matchedTask": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "slug",
            "name"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "slug": {
              "type": "string"
            }
          },
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "recommendations": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "summary",
          "pricingType",
          "categories",
          "tasks",
          "url",
          "websiteUrl",
          "siteStatus",
          "freshness",
          "score",
          "rationale"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "tasks": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "summary": {
            "type": "string"
          },
          "freshness": {
            "type": "object",
            "required": [
              "label",
              "basis",
              "at",
              "ageDays"
            ],
            "properties": {
              "at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "basis": {
                "enum": [
                  "verified",
                  "checked",
                  "none"
                ],
                "type": "string"
              },
              "label": {
                "enum": [
                  "fresh",
                  "aging",
                  "stale",
                  "unknown"
                ],
                "type": "string",
                "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
              },
              "ageDays": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "additionalProperties": {}
          },
          "rationale": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "siteStatus": {
            "type": "string"
          },
          "websiteUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "pricingType": {
            "type": "string"
          }
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": {}
}
recommend_for_task annotations
{
  "title": "Recommend tools for a task",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_taxonomy — List categories or tasks
Advertised by the server during the last successful anonymous check.
Advertised read-only

All category or task slugs with names and live tool counts. Use the slugs as filters for search_tools and recommend_for_task.

list_taxonomy input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind"
  ],
  "properties": {
    "kind": {
      "enum": [
        "categories",
        "tasks"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
list_taxonomy output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "items"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "description",
          "count",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "count": {
            "type": "number"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": {}
}
list_taxonomy annotations
{
  "title": "List categories or tasks",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_articles — Search articles
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search 660+ editorial articles (reviews, comparisons, alternatives round-ups, guides) by keywords and optional category.

search_articles input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "maxLength": 200
    },
    "category": {
      "type": "string",
      "maxLength": 40
    }
  },
  "additionalProperties": false
}
search_articles output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query",
    "total",
    "articles"
  ],
  "properties": {
    "query": {
      "type": "string"
    },
    "total": {
      "type": "number"
    },
    "articles": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "description",
          "category",
          "readingMinutes",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "readingMinutes": {
            "type": "number"
          }
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": {}
}
search_articles annotations
{
  "title": "Search articles",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_article — Get an article
Advertised by the server during the last successful anonymous check.
Advertised read-only

The full markdown body of one article by slug.

get_article input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{0,190}$"
    }
  },
  "additionalProperties": false
}
get_article output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug",
    "title",
    "description",
    "category",
    "readingMinutes",
    "url",
    "markdown"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "category": {
      "type": "string"
    },
    "markdown": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "readingMinutes": {
      "type": "number"
    }
  },
  "additionalProperties": {}
}
get_article annotations
{
  "title": "Get an article",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_status — Check a tool’s status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Is the tool’s site alive? Returns the scanner verdict, when it was last checked and verified, when pricing was last checked, and a freshness label.

check_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,190}$",
      "description": "Tool slug as it appears in https://needanai.com/tool/<slug>"
    }
  },
  "additionalProperties": false
}
check_status output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug",
    "name",
    "url",
    "websiteUrl",
    "siteStatus",
    "freshness",
    "checkedAt",
    "verifiedAt",
    "pricingCheckedAt",
    "note"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "checkedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "freshness": {
      "type": "object",
      "required": [
        "label",
        "basis",
        "at",
        "ageDays"
      ],
      "properties": {
        "at": {
          "type": [
            "string",
            "null"
          ]
        },
        "basis": {
          "enum": [
            "verified",
            "checked",
            "none"
          ],
          "type": "string"
        },
        "label": {
          "enum": [
            "fresh",
            "aging",
            "stale",
            "unknown"
          ],
          "type": "string",
          "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
        },
        "ageDays": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "additionalProperties": {}
    },
    "siteStatus": {
      "type": "string"
    },
    "verifiedAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "websiteUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "pricingCheckedAt": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": {}
}
check_status annotations
{
  "title": "Check a tool’s status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
watch_tool — Watch a tool for changes
Advertised by the server during the last successful anonymous check.

Subscribe to status and pricing changes for a tool (checked every 30 minutes). Delivered to an https webhook or email. Requires an API key (free, from https://needanai.com/profile?tab=api-keys).

watch_tool input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug",
    "channel",
    "target"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,190}$",
      "description": "Tool slug as it appears in https://needanai.com/tool/<slug>"
    },
    "target": {
      "type": "string",
      "maxLength": 2048,
      "minLength": 3,
      "description": "https webhook URL or email address"
    },
    "channel": {
      "enum": [
        "webhook",
        "email"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
watch_tool output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "toolSlug",
    "channel",
    "target",
    "lastNotifiedAt",
    "createdAt"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "target": {
      "type": "string"
    },
    "channel": {
      "type": "string"
    },
    "toolSlug": {
      "type": "string"
    },
    "createdAt": {
      "type": "string"
    },
    "lastNotifiedAt": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": {}
}
watch_tool annotations
{
  "title": "Watch a tool for changes",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_watches — List my watches
Advertised by the server during the last successful anonymous check.
Advertised read-only

Active watches on this API key.

list_watches input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_watches output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "watches"
  ],
  "properties": {
    "watches": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "toolSlug",
          "channel",
          "target",
          "lastNotifiedAt",
          "createdAt"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "target": {
            "type": "string"
          },
          "channel": {
            "type": "string"
          },
          "toolSlug": {
            "type": "string"
          },
          "createdAt": {
            "type": "string"
          },
          "lastNotifiedAt": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": {}
      }
    }
  },
  "additionalProperties": {}
}
list_watches annotations
{
  "title": "List my watches",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
unwatch_tool — Remove a watch
Advertised by the server during the last successful anonymous check.
Advertised destructive

Stop a watch by id.

unwatch_tool input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "additionalProperties": false
}
unwatch_tool output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "revoked"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "revoked": {
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": {}
}
unwatch_tool annotations
{
  "title": "Remove a watch",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
submit_tool — Submit a tool
Advertised by the server during the last successful anonymous check.

Suggest a tool for the catalogue. If its website is already listed the existing listing is returned instead. Requires an API key.

submit_tool input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name",
    "url",
    "description"
  ],
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 2048
    },
    "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2
    },
    "description": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 20
    },
    "pricingType": {
      "enum": [
        "free",
        "freemium",
        "paid",
        "subscription",
        "free-trial",
        "contact"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
submit_tool output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "tool": {
      "type": "object",
      "required": [
        "slug",
        "name",
        "summary",
        "pricingType",
        "categories",
        "tasks",
        "url",
        "websiteUrl",
        "siteStatus",
        "freshness"
      ],
      "properties": {
        "url": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "tasks": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "summary": {
          "type": "string"
        },
        "freshness": {
          "type": "object",
          "required": [
            "label",
            "basis",
            "at",
            "ageDays"
          ],
          "properties": {
            "at": {
              "type": [
                "string",
                "null"
              ]
            },
            "basis": {
              "enum": [
                "verified",
                "checked",
                "none"
              ],
              "type": "string"
            },
            "label": {
              "enum": [
                "fresh",
                "aging",
                "stale",
                "unknown"
              ],
              "type": "string",
              "description": "fresh ≤30 days, aging ≤90 days, stale beyond, unknown when never checked"
            },
            "ageDays": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "additionalProperties": {}
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "siteStatus": {
          "type": "string"
        },
        "websiteUrl": {
          "type": [
            "string",
            "null"
          ]
        },
        "pricingType": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "status": {
      "enum": [
        "submitted",
        "already_listed"
      ],
      "type": "string"
    },
    "submissionId": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}
submit_tool annotations
{
  "title": "Submit a tool",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
export_tools — Export tools
Advertised by the server during the last successful anonymous check.

Bulk export of a filtered slice of the catalogue (up to 2,000 rows) as JSON or CSV. Returns a signed download URL valid for 24 hours. Requires an API key.

export_tools input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "task": {
      "type": "string",
      "maxLength": 120
    },
    "query": {
      "type": "string",
      "maxLength": 200
    },
    "format": {
      "enum": [
        "json",
        "csv"
      ],
      "type": "string"
    },
    "maxRows": {
      "type": "integer",
      "maximum": 2000,
      "minimum": 1
    },
    "pricing": {
      "type": "array",
      "items": {
        "enum": [
          "free",
          "freemium",
          "paid",
          "subscription",
          "free-trial",
          "contact"
        ],
        "type": "string"
      }
    },
    "category": {
      "type": "string",
      "maxLength": 120
    }
  },
  "additionalProperties": false
}
export_tools output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "format",
    "rows",
    "createdAt",
    "expiresAt",
    "url",
    "truncated"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "description": "Signed download URL, valid until expiresAt."
    },
    "rows": {
      "type": "number"
    },
    "format": {
      "type": "string"
    },
    "createdAt": {
      "type": "string"
    },
    "expiresAt": {
      "type": "string"
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "additionalProperties": {}
}
export_tools annotations
{
  "title": "Export tools",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

1 advertised

find_tool_for — Find an AI tool for a task

Advertised by the server during the last successful anonymous check.

Guides the model through recommend_for_task → compare_tools with the freshness caveat.

task
What the user wants to do (required)
budget
No description

Resources

0 advertised

tool — Tool profile

Advertised by the server during the last successful anonymous check.

Markdown profile of a NeedAnAI tool

tool URI template
needanai://tool/{slug}

MIME type: text/markdown

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
497 ms
95th percentile latency
497 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 497 ms · metadata changed · 14 tool(s), 0 resource(s), 1 resource template(s), 1 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http needanai-mcp https://mcp.needanai.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add needanai-mcp --url https://mcp.needanai.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable needanai-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "needanai-mcp": {
      "url": "https://mcp.needanai.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "needanai-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.needanai.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start needanai-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "needanai-mcp": {
      "type": "http",
      "url": "https://mcp.needanai.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http needanai-mcp https://mcp.needanai.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "needanai-mcp": {
      "url": "https://mcp.needanai.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "needanai-mcp": {
      "serverUrl": "https://mcp.needanai.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like NeedAnAI MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run NeedAnAI MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing