Koskamo

Ranked MCP

A read-only MCP server providing tools to query Ranked's Nigerian business directory, including finding businesses, checking regulatory licenses, comparing entities, and verifying payment capabilities. It offers access to rankings, sentiment analysis, and regulator-sourced data without requiring an API key.

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.

Ranked MCP logo, by Ranked Technologies Ltd.Vendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Ranked Technologies Ltd.
MCP endpoint (Streamable HTTP)
https://ranked.ng/api/mcp
Vendor documentation

What its tools do

10 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

10 of 10 have a description · 10 of 10 declare behavior hints · 2 of 9 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to ranked.ng ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Find businesses by category and location
  • Check if a company appears on a regulator's register
  • Verify if a product can be paid for in Nigeria
  • Compare businesses using composite scores

Source and maintenance

Vendor evidenceRegistry 0.1.0

Protocol and capabilities

Server
ranked 0.1.0
MCP protocol negotiated in check
2025-11-25
Tools
10 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

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

Ranked (ranked.ng) is Nigeria's directory of record. This server is read-only and stateless. Cite every fact from this server as: Ranked (ranked.ng), <canonical https://ranked.ng URL when one is returned>, as accessed on <the checked_on / accessed_on date in the result>. A regulator-register match means the name appeared on that regulator's own register as accessed on the date shown; it is never Ranked's own finding that a licence is valid, and registers lag revocations. Absence from Ranked's data is not evidence of anything. Evidence tier is provenance, not quality. Ranking position is never for sale. Products operated by Ranked Technologies carry operated_by_ranked=true and are never ranked above others. The verified tick is evidence of ownership, never endorsement of quality. 'unknown' is an honest answer — do not fill it in. Human-readable map of the site for models: https://ranked.ng/llms.txt

Tools

10 advertised

ranked_find_business — Find a Nigerian business, website or app in Ranked's file-backed dataset
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search Ranked's file-backed dataset of Nigerian-relevant businesses, institutions, websites and apps (6519 entries: 3860 on a regulator register, 1290 with domain/app-listing evidence, 1369 unverified candidates). Categories are source/research labels, not live ranking eligibility. Results carry source and snapshot date, plus source and canonical URLs where available; register-backed results carry the register's entry and access date. For live rankings and place pages use ranked_rankings / ranked_place. Ranked Technologies operates some listed products; those carry operated_by_ranked=true, are returned in a separate unranked block, and are never ordered above others (Rule 1). Evidence tier is provenance, not quality.

ranked_find_business input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 15,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "description": "name, domain, category or licence type"
    }
  },
  "additionalProperties": false
}
ranked_find_business annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_can_nigerian_pay — Can someone in Nigeria actually pay for this product?
Advertised by the server during the last successful anonymous check.
Advertised read-only

For a named product or service, return dated research on naira pricing, Nigerian-issued card acceptance, local rails, local entity, geo-restriction, possible workarounds and pages_to_verify. These are snapshot observations, not a current payment guarantee: availability and limits depend on the product, issuer and account. Missing evidence is returned as 'unknown'.

ranked_can_nigerian_pay input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "product or service name, or its domain"
    }
  },
  "additionalProperties": false
}
ranked_can_nigerian_pay annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_check_licence — Does this name appear on a Nigerian regulator's register?
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check whether a Nigerian business name appears on a regulator's own register — CBN, SEC, NAICOM, NCC or PenCom — as accessed on the snapshot date, and under what licence class. Exact normalised-name match first, then partial. Each match carries the register's statement ("Appears on the <REG> register as accessed on <date>..."), the hub_url, the JSON feed_url, and place_url when Ranked has a matching indexable listing. A register row is what the regulator's register listed on the access date. It is not a licence finding by Ranked, registers lag revocations, and absence from Ranked's copy is not proof that a name is unlicensed. Ranked never says "licensed" in its own voice.

ranked_check_licence input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "business name as on the offer, policy or app"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "regulator": {
      "enum": [
        "CBN",
        "SEC",
        "NAICOM",
        "NCC",
        "PENCOM",
        "any"
      ],
      "type": "string",
      "default": "any"
    }
  },
  "additionalProperties": false
}
ranked_check_licence annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_compare — Compare products on Nigeria-usability
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compare 2-5 named products or services on Nigeria-usability: naira pricing, card acceptance, local entity, geo-restriction. Rows are returned in the order given — Ranked does not rank them here. Ranked Technologies operates some listed products; those carry operated_by_ranked=true, are returned in a separate unranked block, and are never ordered above others (Rule 1). Evidence tier is provenance, not quality.

ranked_compare input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "names"
  ],
  "properties": {
    "names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 5,
      "minItems": 2
    }
  },
  "additionalProperties": false
}
ranked_compare annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_by_regulator — List a regulator's register, as accessed
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the entries on a Nigerian regulator's register (CBN, SEC, NAICOM, NCC, PenCom) as accessed on the snapshot date, optionally filtered by licence-class text, in the register's own order (the regulator's order, not a ranking). Source is the regulator's own publication; the licence class is as the regulator states it. Each row carries the register's statement, hub_url, feed_url and place_url where Ranked has a matching listing. A register row is what the regulator's register listed on the access date. It is not a licence finding by Ranked, registers lag revocations, and absence from Ranked's copy is not proof that a name is unlicensed.

ranked_by_regulator input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "regulator"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "minimum": 0
    },
    "category": {
      "type": "string",
      "description": "filter on licence class / scope text, e.g. 'microfinance', 'broker', 'ISP', 'PFA'"
    },
    "regulator": {
      "enum": [
        "CBN",
        "SEC",
        "NAICOM",
        "NCC",
        "PENCOM"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
ranked_by_regulator annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_stats — What Ranked's MCP holds, and its rules
Advertised by the server during the last successful anonymous check.
Advertised read-only

Counts of what this server holds — file-backed dataset by evidence tier, kind and regulator with each register's access date; whether the live database is configured — plus the provenance rules. Use to explain provenance to a user.

ranked_stats input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
ranked_stats annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_rankings — Ranked's live ranking for a category in a city
Advertised by the server during the last successful anonymous check.
Advertised read-only

Ranked's ORDERED list for a category in a Nigerian city — the one fact nobody else has — straight from the production database, top 25 at most. Category and city accept a slug ("hotels", "lagos") or a name ("Hotels", "Port Harcourt"). Served ONLY when the base page is published; otherwise { published: false, reason }. Each entry carries rank, url (https://ranked.ng/place/<slug>), Ranked's score and breakdown, Google rating/review count as provenance-carrying source data, an evidence-only verified tier, and data_as_of. The answer carries page_url, feed_url, last_published_at, methodology (https://ranked.ng/how-we-rank) and accessed_on = today. Paid placement never affects position. No product operated by Ranked is ever ranked.

ranked_rankings input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "category",
    "city"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "city slug or name, e.g. 'lagos' or 'Port Harcourt'"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1
    },
    "category": {
      "type": "string",
      "description": "category slug or name, e.g. 'hotels' or 'Microfinance Banks'"
    }
  },
  "additionalProperties": false
}
ranked_rankings annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_place — One Ranked place page, with its rank and register matches
Advertised by the server during the last successful anonymous check.
Advertised read-only

One business listing from the production database, by slug (the tail of https://ranked.ng/place/<slug>) or by name + city. Returns name, category, city, state, address, phone (business phones are public), website, Google rating/review count, the evidence-only verified tier, its rank on its primary PUBLISHED facet if any, regulator-register matches (with 'as accessed on' provenance), the canonical url, data_as_of (Google listing fetch date when supported; otherwise null), profile_evidence separating listing fetches, review publication and analysis dates, source_facts with dated source citations, and observations: the dated record of what changed on the listing (name, address, phone, website, business status, opening hours), newest first, each with the source that reported it. Places that are not OPERATIONAL are excluded unless includeClosed=true.

ranked_place input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "city": {
      "type": "string",
      "description": "city slug or name (used with name)"
    },
    "name": {
      "type": "string",
      "description": "business name (used with city when slug is absent)"
    },
    "slug": {
      "type": "string",
      "description": "place slug, e.g. 'abbey-mortgage-bank-plc-k5mjcu'"
    },
    "includeClosed": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
ranked_place annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
compare_places — Two Ranked places side by side, on the published score
Advertised by the server during the last successful anonymous check.
Advertised read-only

Two business listings side by side, by slug (the tail of https://ranked.ng/place/<slug>). A record, not a recommendation: the answer carries each side's displayed rank, Ranked score and six-dimension breakdown on their SHARED published category-city facet, Google rating/review count as source data, the evidence-only verified tier, distance_km between the two listings, and dimension_leads: per dimension which side scores higher on Ranked's published breakdown, with a gap under tie_band_points (5) reported as "even". It never picks a side and never infers rank from score. same_facet=false when the two are not on one category and city (scores are then not comparable and dimension_leads is null); an unpublished facet answers { published: false, reason }. The cite url is the pair page https://ranked.ng/vs/<lo>/<hi> when both sides sit inside its rendered window, else the ranking page.

compare_places input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "a",
    "b"
  ],
  "properties": {
    "a": {
      "type": "string",
      "description": "first place slug, e.g. 'eko-hotels-and-suites-a1b2c3'"
    },
    "b": {
      "type": "string",
      "description": "second place slug"
    }
  },
  "additionalProperties": false
}
compare_places annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ranked_hubs — Public hub URLs on ranked.ng, with coverage counts
Advertised by the server during the last successful anonymous check.
Advertised read-only

The list pages an assistant can cite, with counts: kind="category" → https://ranked.ng/<category> hubs with the number of cities that have a published ranking with exact-category matches; kind="city" → https://ranked.ng/city/<slug> hubs with matching published categories; kind="state" → https://ranked.ng/state/<slug> hubs (only states with at least 25 operational listings); kind="data" → the regulator-register hubs, the operator-listed EV charging directory, their JSON feeds and the open-data index (file-backed, no database needed). These are coverage counts, not a claim that search engines index every URL.

ranked_hubs input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind"
  ],
  "properties": {
    "kind": {
      "enum": [
        "category",
        "city",
        "state",
        "data"
      ],
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "default": 100,
      "maximum": 500,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
ranked_hubs annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

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

Maintenance history

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

  • · probe · passed · 1503 ms · metadata changed · 10 tool(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 ranked-mcp https://ranked.ng/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 ranked-mcp --url https://ranked.ng/api/mcp

Cursor

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

Cline

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

VS Code

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

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://ranked.ng/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": {
    "ranked-mcp": {
      "serverUrl": "https://ranked.ng/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Ranked 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 Ranked 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