# Ujeebu

> Web scraping, Google SERP, Markdown and ChatGPT/Gemini answers as typed tools for AI agents.

- name: com.ujeebu/mcp
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.ujeebu%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/com.ujeebu%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ujeebu": {
      "type": "http",
      "url": "https://mcp.ujeebu.com/mcp",
      "headers": {
        "Authorization": "Bearer ${UJEEBU_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${UJEEBU_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-95% +updated-10d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 17 of 17 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 6,015 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 5 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 17, about 6,015 tokens to load them all
- tool set hash: f6a3830bd22320248a1c3d9af6516c24
- tools last changed: 2026-10-11T04:45:51.305Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.ujeebu/mcp.svg)](https://protogrid.dev/servers/com.ujeebu/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-11 `ujeebu_signup_status` added
  - Check a pending ujeebu_signup request. Works without a key. Poll about every 10 seconds (never faster than every 2 seconds). status values: pending_confirmation (the human has not clicked the link yet, keep polling), confirmed (the response contains api_key, shown ONCE: store it immediately, then reconnect to this MCP server with header Authorization: Bearer <key>), delivered (the key was already returned by an earlier poll and cannot be shown again), expired or declined (start over with ujeebu_signup if appropriate).
- 2026-10-11 `ujeebu_signup` added
  - Create a Ujeebu account (and get an API key) for your human, without a key. Works in an unauthenticated session. Ujeebu emails a confirmation link to the address: a human must open it and click Confirm; you cannot confirm it yourself, so tell your human to check their inbox. The response contains request_id and poll_token: keep both and call ujeebu_signup_status about every 10 seconds until status is confirmed (or expired/declined). Requests expire after 24 hours. If the email already has a Ujeebu account, the owner gets an approval email instead; the flow is the same from your point of view (a new key is returned once approved). New accounts start on a free trial.
- 2026-10-11 `ujeebu_plans` added
  - Show the account's current plan, credits left, whether agent purchases are enabled (and the monthly cap and remaining amount), plus the available plans and credit top-ups with prices (in cents). Requires an API key. Use the plan/top-up ids from here as 'item' in ujeebu_checkout_link or ujeebu_buy.
- 2026-10-11 `ujeebu_checkout_link` added
  - Create a Stripe checkout link for a credit top-up or a plan upgrade. Requires an API key. Nothing is charged: give the checkout_url to your human, who pays on Stripe's page; credits or the new plan are applied automatically after payment. Only upgrades are possible; downgrades and cancellations must be done by the human in the dashboard.
- 2026-10-11 `ujeebu_buy` added
  - Buy a credit top-up or upgrade the plan directly, charging the account's saved card. Requires an API key. This charges the saved card only if the human enabled agent purchases and set a monthly cap in the Ujeebu dashboard (Billing); agent purchases are off by default. Otherwise (purchases disabled, no saved card, over the monthly cap, card declined, or extra verification required) it returns an error with a checkout_url: hand that link to your human instead. Never retry a declined charge in a loop. Check ujeebu_plans first for prices and the remaining monthly cap. Downgrades and cancellations are not possible via agents.

Full history: https://api.protogrid.dev/v1/servers/com.ujeebu%2Fmcp/changes

## Remotes

- https://mcp.ujeebu.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.9459459)

## Packages

_none_

## Tools (17)

- `ujeebu_account`: Get account usage information including balance, quota, requests used, and billing details. Rate limited to 10 calls per minute.
- `ujeebu_buy`: Buy a credit top-up or upgrade the plan directly, charging the account's saved card. Requires an API key. This charges the saved card only if the human enabled agent purchases and set a monthly cap in the Ujeebu dashboard (Billing); agent purchases are off by default. Otherwise (purchases disabled, no saved card, over the monthly cap, card declined, or extra verification required) it returns an error with a checkout_url: hand that link to your human instead. Never retry a declined charge in a loop. Check ujeebu_plans first for prices and the remaining monthly cap. Downgrades and cancellations are not possible via agents.
- `ujeebu_card`: Fast article preview extraction using meta tags. Returns title, summary, author, dates, image, and site info. Much faster than full extraction.
- `ujeebu_chatgpt`: Fetch a URL and ask ChatGPT about it. Ujeebu loads the page, sends it to ChatGPT with your prompt, and returns the model's reply.
- `ujeebu_checkout_link`: Create a Stripe checkout link for a credit top-up or a plan upgrade. Requires an API key. Nothing is charged: give the checkout_url to your human, who pays on Stripe's page; credits or the new plan are applied automatically after payment. Only upgrades are possible; downgrades and cancellations must be done by the human in the dashboard.
- `ujeebu_extract`: Extract clean, structured data from news or blog articles. Returns main text/HTML, author, publish date, images, media, RSS feeds, and more.
- `ujeebu_gemini`: Fetch a URL and ask Gemini about it. Ujeebu loads the page, sends it to Gemini with your prompt, and returns the model's reply.
- `ujeebu_markdown`: Convert any web page into clean, LLM-optimized Markdown. Ideal for feeding page content to a model or RAG pipeline.
- `ujeebu_plans`: Show the account's current plan, credits left, whether agent purchases are enabled (and the monthly cap and remaining amount), plus the available plans and credit top-ups with prices (in cents). Requires an API key. Use the plan/top-up ids from here as 'item' in ujeebu_checkout_link or ujeebu_buy.
- `ujeebu_scrape_extract`: Extract structured data from web pages using custom rules. Define CSS selectors or XPath queries to extract specific data. Always returns JSON with extracted data.
- `ujeebu_scrape_html`: Scrape and render web pages to get HTML content. Supports JavaScript execution, custom headers, scrolling, and content manipulation. Returns clean HTML or raw HTML.
- `ujeebu_scrape_json`: General web scraping that always returns JSON response with metadata. Use this when you need structured response data including headers, status, timing info, and content. Can return HTML, screenshot, or PDF in JSON format.
- `ujeebu_scrape_pdf`: Generate PDF from web pages. Supports custom page sizes, JavaScript execution, and rendering options. Returns base64-encoded PDF data.
- `ujeebu_scrape_screenshot`: Take screenshots of web pages. Supports full page or partial screenshots, JavaScript execution, and custom viewport sizes. Returns base64-encoded image data.
- `ujeebu_serp`: Retrieve Google search results programmatically. Supports web search, images, news, videos, and maps with customizable location, language, and device settings.
- `ujeebu_signup`: Create a Ujeebu account (and get an API key) for your human, without a key. Works in an unauthenticated session. Ujeebu emails a confirmation link to the address: a human must open it and click Confirm; you cannot confirm it yourself, so tell your human to check their inbox. The response contains request_id and poll_token: keep both and call ujeebu_signup_status about every 10 seconds until status is confirmed (or expired/declined). Requests expire after 24 hours. If the email already has a Ujeebu account, the owner gets an approval email instead; the flow is the same from your point of view (a new key is returned once approved). New accounts start on a free trial.
- `ujeebu_signup_status`: Check a pending ujeebu_signup request. Works without a key. Poll about every 10 seconds (never faster than every 2 seconds). status values: pending_confirmation (the human has not clicked the link yet, keep polling), confirmed (the response contains api_key, shown ONCE: store it immediately, then reconnect to this MCP server with header Authorization: Bearer <key>), delivered (the key was already returned by an earlier poll and cannot be shown again), expired or declined (start over with ujeebu_signup if appropriate).
