Koskamo

Neeed Directory MCP

This MCP server allows agents to search the Neeed Directory of software tools, fetch product details, list categories, and manage listings by submitting, updating, or upgrading products. It supports drafting listings for makers to claim and checking badge status, providing a comprehensive interface for directory interaction without requiring authentication keys for read operations.

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.

Neeed Directory MCP logo, by SupacatVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Supacat
MCP endpoint (Streamable HTTP)
https://neeed.directory/api/mcp
Vendor documentation

What you can do with it

  • Search for software tools in the directory
  • Fetch detailed information about a specific product
  • Submit a new product listing for a maker
  • List all available categories in the directory

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
neeed-directory 1.0.0
MCP protocol
2025-06-18
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  }
}

Server-provided instructions

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

Neeed Directory lists software and digital products. Cite products by their url. search, fetch, list_categories and list_products read the public catalog and need no sign-in. Without listings:write, submit_product saves a private draft and answers with a claim link; nothing is published or charged until the maker opens it, signs in and submits. With listings:write, submit_product submits the listing and answers with its review status or a browser checkout link, and my_listings, check_badge, update_listing and upgrade_listing act on the signed-in maker's own listings; the client asks the maker to sign in.

Tools

9 advertised

search — Search products
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search approved products on Neeed Directory, newest first. Returns at most 20 results with id, title and url. The id is the product slug; pass it to fetch for a plain-text card. Queries shorter than two characters return no results.

search input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Search terms; the first 100 characters are read"
    }
  }
}
search output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "results"
  ],
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
search annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch — Fetch product
Advertised by the server during the last successful anonymous check.
Advertised read-only

One approved product on Neeed Directory by id, the slug from search or list_products. Returns its title, plain-text card, url and metadata including its website, category and pricing model.

fetch input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "A product slug from search or list_products"
    }
  }
}
fetch output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id",
    "title",
    "text",
    "url",
    "metadata"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "text": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "metadata": {
      "type": "object",
      "required": [
        "website",
        "category",
        "pricing_model",
        "product_type",
        "featured",
        "listed_at"
      ],
      "properties": {
        "website": {
          "type": "string"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "featured": {
          "type": "boolean"
        },
        "listed_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "product_type": {
          "anyOf": [
            {
              "enum": [
                "software",
                "digital_product"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "pricing_model": {
          "anyOf": [
            {
              "enum": [
                "free",
                "freemium",
                "paid",
                "open_source"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
fetch annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_categories — List categories
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every category on Neeed Directory with its slug, name, approved product count and url. Pass a category slug to list_products to read its product cards.

list_categories input schema
{
  "type": "object",
  "properties": {}
}
list_categories output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "categories"
  ],
  "properties": {
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "url",
          "count"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": 0,
            "description": "Live listings in the category"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
list_categories annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_products — List products
Advertised by the server during the last successful anonymous check.
Advertised read-only

Approved product cards on Neeed Directory, newest first, with optional query, category, label and tag filters. Returns at most 50 cards per page with a total count. Each slug is an id that fetch accepts.

list_products input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Full-text query over name, tagline and description"
    },
    "tag": {
      "type": "string",
      "description": "Tag slug"
    },
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 500,
      "minimum": 1,
      "description": "Page number"
    },
    "label": {
      "type": "string",
      "description": "Label slug"
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Products per page"
    },
    "category": {
      "type": "string",
      "description": "Category slug"
    }
  }
}
list_products output schema
{
  "type": "object",
  "$defs": {
    "ProductCard": {
      "type": "object",
      "required": [
        "slug",
        "name",
        "punchline",
        "url",
        "website",
        "logo",
        "category",
        "pricing_model",
        "product_type",
        "featured",
        "description"
      ],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri",
          "description": "The listing on Neeed Directory"
        },
        "logo": {
          "anyOf": [
            {
              "type": "string",
              "format": "uri"
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "website": {
          "type": "string",
          "description": "The product's own site"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Category slug"
        },
        "featured": {
          "type": "boolean"
        },
        "punchline": {
          "type": "string",
          "description": "The one-line tagline"
        },
        "description": {
          "type": "string",
          "description": "A plain-text description"
        },
        "product_type": {
          "anyOf": [
            {
              "enum": [
                "software",
                "digital_product"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "pricing_model": {
          "anyOf": [
            {
              "enum": [
                "free",
                "freemium",
                "paid",
                "open_source"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "products",
    "total",
    "page",
    "limit"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "limit": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "total": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Matches across every page"
    },
    "products": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ProductCard"
      }
    }
  },
  "additionalProperties": false
}
list_products annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
submit_product — Submit a product
Advertised by the server during the last successful anonymous check.
Open-world

Without sign-in, saves a private draft listing on Neeed Directory and returns a claim link: nothing is published or charged until the maker opens it, signs in and submits. Signed in with permission to edit listings, submits the listing to the maker's account: Neeed's automatic check publishes it or holds it for review, and Premium returns a Stripe Checkout link the maker pays in the browser.

submit_product input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "website",
    "name",
    "punchline",
    "description",
    "category",
    "product_type",
    "pricing_model"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "description": "The product's name"
    },
    "plan": {
      "enum": [
        "free",
        "premium"
      ],
      "type": "string",
      "default": "free",
      "description": "The plan the maker wants; nothing is charged until they submit"
    },
    "website": {
      "type": "string",
      "maxLength": 2048,
      "description": "The product's website, https"
    },
    "category": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "One category slug from list_categories"
    },
    "punchline": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "One line on what it does"
    },
    "description": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 1,
      "description": "What it does and for whom, factual, in plain text. The 1000-character limit counts &, < and > as several characters each"
    },
    "product_type": {
      "enum": [
        "software",
        "digital_product"
      ],
      "type": "string",
      "description": "software, or digital_product for templates, courses, ebooks and the like"
    },
    "pricing_model": {
      "enum": [
        "free",
        "freemium",
        "paid",
        "open_source"
      ],
      "type": "string",
      "description": "How the maker charges for it"
    }
  }
}
submit_product output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status"
  ],
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "The listing: its public page when live or already_listed, its edit page otherwise"
    },
    "plan": {
      "enum": [
        "free",
        "pending_payment"
      ],
      "type": "string",
      "description": "Signed in only. pending_payment: Premium starts once the maker pays"
    },
    "slug": {
      "type": "string",
      "description": "The reserved product slug for a draft"
    },
    "badge": {
      "type": "object",
      "required": [
        "html",
        "markdown"
      ],
      "properties": {
        "html": {
          "type": "string"
        },
        "markdown": {
          "type": "string"
        }
      },
      "description": "Free plan only: the badge for the product's site, linking to its future listing",
      "additionalProperties": false
    },
    "status": {
      "enum": [
        "draft_created",
        "already_listed",
        "already_submitted",
        "live",
        "in_review"
      ],
      "type": "string",
      "description": "draft_created: saved for the maker to claim. already_listed: the site is live on Neeed. already_submitted: signed in, this account already has a listing for the site, see listing_status. live: listed under the maker's account. in_review: saved to the maker's account, waiting on a review"
    },
    "claim_url": {
      "type": "string",
      "format": "uri",
      "description": "The maker opens it, signs in and submits. Works once."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      "description": "When the claim link stops working"
    },
    "next_steps": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "checkout_url": {
      "type": "string",
      "format": "uri",
      "description": "Signed in, Premium, live: Stripe Checkout, which the maker opens and pays"
    },
    "listing_status": {
      "enum": [
        "live",
        "in_review",
        "changes_requested",
        "rejected",
        "hidden_badge_missing"
      ],
      "type": "string",
      "description": "already_submitted only: where that listing stands"
    }
  },
  "additionalProperties": false
}
submit_product annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
my_listings — My listings
Advertised by the server during the last successful anonymous check.
Advertised read-only

Your listings on Neeed Directory, newest first: status, plan, badge, the admin's feedback when there is any, and the page to open. Pass a slug to get one. When next_page is a number, call again with that page for older listings.

my_listings input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "page": {
      "type": "integer",
      "maximum": 500,
      "minimum": 1,
      "description": "The page to read, from 1 (the default), 100 listings each; ignored with a slug"
    },
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
      "maxLength": 200,
      "minLength": 1,
      "description": "The listing's slug, from my_listings"
    }
  }
}
my_listings output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "listings",
    "total",
    "next_page"
  ],
  "properties": {
    "total": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Your listings across every page, or 1 or 0 with a slug"
    },
    "listings": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "slug",
          "status",
          "plan",
          "review_feedback",
          "badge",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The public page when live, the dashboard when rejected, the edit page otherwise"
          },
          "name": {
            "type": "string"
          },
          "plan": {
            "enum": [
              "free",
              "premium",
              "pending_payment"
            ],
            "type": "string",
            "description": "pending_payment: Premium was picked and is not paid yet"
          },
          "slug": {
            "type": "string"
          },
          "badge": {
            "type": "object",
            "required": [
              "state"
            ],
            "properties": {
              "state": {
                "enum": [
                  "not_needed",
                  "verified",
                  "not_verified",
                  "revoked"
                ],
                "type": "string",
                "description": "not_needed: Premium. verified: the link is dofollow. revoked: the badge disappeared from the site"
              },
              "grace_ends_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
                "description": "Revoked only: when the listing is hidden unless the badge is verified again"
              }
            },
            "additionalProperties": false
          },
          "status": {
            "enum": [
              "live",
              "in_review",
              "changes_requested",
              "rejected",
              "hidden_badge_missing"
            ],
            "type": "string",
            "description": "live: public. in_review: waiting on a review. changes_requested: edit it to send it back. rejected: final. hidden_badge_missing: hidden until the badge is back and verified"
          },
          "review_feedback": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What the admin asked for or why they rejected it"
          }
        },
        "additionalProperties": false
      }
    },
    "next_page": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        {
          "type": "null"
        }
      ],
      "description": "The page to ask for next, or null on the last page"
    }
  },
  "additionalProperties": false
}
my_listings annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_badge — Check my badge
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Looks for the Neeed badge on one of your Free listings' sites now and answers found, missing or inconclusive, with the markup to add. It records nothing: the maker presses Verify on the listing's edit page to make the link dofollow or bring a hidden listing back.

check_badge input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
      "maxLength": 200,
      "minLength": 1,
      "description": "The listing's slug, from my_listings"
    }
  }
}
check_badge output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug",
    "result",
    "verified",
    "badge",
    "next_step"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "badge": {
      "type": "object",
      "required": [
        "html",
        "markdown"
      ],
      "properties": {
        "html": {
          "type": "string"
        },
        "markdown": {
          "type": "string"
        }
      },
      "description": "The badge for the product's site, linking to its listing",
      "additionalProperties": false
    },
    "result": {
      "enum": [
        "found",
        "missing",
        "inconclusive"
      ],
      "type": "string",
      "description": "inconclusive: the site could not be read, which says nothing either way"
    },
    "verified": {
      "type": "boolean",
      "description": "Whether the listing has the badge on record"
    },
    "next_step": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
check_badge annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
update_listing — Update a listing
Advertised by the server during the last successful anonymous check.
Advertised destructive

Edits one of your listings: name, punchline, description, category, pricing model or Twitter handle, under the dashboard's rules. Editing a listing that is not live sends it back for review; a live listing stays live. A rejected listing cannot be edited.

update_listing input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug"
  ],
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "description": "The product's name"
    },
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
      "maxLength": 200,
      "minLength": 1,
      "description": "The listing's slug, from my_listings"
    },
    "twitter": {
      "type": "string",
      "maxLength": 50,
      "description": "The product's Twitter or X handle, like @neeed. Empty clears it"
    },
    "category": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "One category slug from list_categories"
    },
    "punchline": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "One line on what it does"
    },
    "description": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 1,
      "description": "What it does and for whom, factual, in plain text. The 1,000-character limit counts &, < and > as several characters each"
    },
    "pricing_model": {
      "enum": [
        "free",
        "freemium",
        "paid",
        "open_source"
      ],
      "type": "string",
      "description": "How the maker charges for it"
    }
  }
}
update_listing output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug",
    "status",
    "url",
    "next_step"
  ],
  "properties": {
    "url": {
      "type": "string",
      "format": "uri"
    },
    "slug": {
      "type": "string"
    },
    "status": {
      "enum": [
        "live",
        "in_review",
        "changes_requested",
        "rejected",
        "hidden_badge_missing"
      ],
      "type": "string",
      "description": "live: public. in_review: waiting on a review. changes_requested: edit it to send it back. rejected: final. hidden_badge_missing: hidden until the badge is back and verified"
    },
    "next_step": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
update_listing annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
upgrade_listing — Upgrade to Premium
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Returns a Stripe Checkout link that upgrades one of your live Free listings to Premium, with the price. Nothing is charged until the maker opens the link and pays in the browser.

upgrade_listing input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
      "maxLength": 200,
      "minLength": 1,
      "description": "The listing's slug, from my_listings"
    }
  }
}
upgrade_listing output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "slug",
    "checkout_url",
    "amount",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "amount": {
      "type": "object",
      "required": [
        "cents",
        "currency",
        "formatted"
      ],
      "properties": {
        "cents": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        "currency": {
          "type": "string",
          "const": "usd"
        },
        "formatted": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "checkout_url": {
      "type": "string",
      "format": "uri",
      "description": "Stripe Checkout. The maker opens it and pays in the browser"
    }
  },
  "additionalProperties": false
}
upgrade_listing annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}

Prompts

1 advertised

submit_to_neeed — Submit to Neeed

Advertised by the server during the last successful anonymous check.

Drafts a Neeed listing from a product's website, has the maker approve it, and submits it with submit_product.

website
The product's website, https (required)

Resources

Not advertised

No resource definitions available.

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
1336 ms
95th percentile latency
1336 ms

Maintenance history

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

  • · probe · passed · 1336 ms · metadata changed · 9 tool(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 neeed-directory-mcp https://neeed.directory/api/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 neeed-directory-mcp --url https://neeed.directory/api/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start neeed-directory-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "neeed-directory-mcp": {
      "type": "http",
      "url": "https://neeed.directory/api/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 neeed-directory-mcp https://neeed.directory/api/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": {
    "neeed-directory-mcp": {
      "url": "https://neeed.directory/api/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": {
    "neeed-directory-mcp": {
      "serverUrl": "https://neeed.directory/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Neeed Directory 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 Neeed Directory 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