Jiji MCP
Provides a WhatsApp handoff package for a selected Jiji seller, enabling the owner to continue contact manually; it does not perform automatic outreach.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Jiji MCP search Jiji for used iPhones under 200,000 naira"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Jiji MCP
An independent, MIT-licensed MCP for Jiji, with no browser extension required. Sign in directly on Jiji in the companion's dedicated Chrome window. Codex, Claude, ChatGPT and Grokbot can share your companion through local MCP or an authenticated HTTPS relay.
This project is not affiliated with Jiji. Undocumented endpoints and page selectors can change. Version 0.3 adds a platform catalog with 73 read resources, 35 locally approved changes and 42 browser workflows. Coverage includes direct tools and owner handoffs; opening a workflow does not automate its final steps. Not every endpoint or write has been live-tested. See FEATURES.md and VALIDATION.md.
Capabilities
Tools | Function |
| Extension-free browser login and connection status |
| Search, filters, authoritative pagination and full listing details |
| Compare shortlisted sellers and advertised asking prices for buying/resale research |
| One selected seller's contacts and a WhatsApp handoff package; no automatic outreach |
| Your inbox previews and recent conversation messages |
| Read your existing saved listings |
| Prepare an exact message/native price offer, review it locally, and check its outcome |
| Discover every mapped resource, action schema and browser workflow |
| Read profile/business settings, adverts/forms, saved searches, notifications, feedback, orders, statistics and billing information |
| Prepare exact account changes or advert submissions for local approval and inspect their outcomes |
| Open mapped Jiji workflows and inspect ordinary forms; sensitive workflows remain owner handoffs |
There are 21 MCP tools. There is no MCP send/approve tool. jiji_prepare_message returns a local approval page showing the exact seller, listing and message. Only the owner can submit that page. Each plan expires after ten minutes and can be used once. An uncertain result is not retried automatically. Payments, media uploads, identity verification and credential changes are completed directly on Jiji through owner workflows. Account changes use the same local approval boundary.
Related MCP server: glongus-mcp
Native category filters
For used/new, brand or type filters, first call jiji_account_data with resource: "listing_filters" and the category slug. Use the returned exact filter_name and values; attribute identifiers vary by category. Supply that category as category_slug when searching. Unscoped attribute filters are rejected because Jiji can silently ignore them.
For example, the verified solar-panel category supports:
{
"query": "450w solar panel",
"category_slug": "solar-energy-products",
"filters": {
"filter_attr_1484_condition": "Used",
"filter_attr_1483_type": "Solar Panels"
},
"limit": 8
}Both jiji_search and jiji_market_prices accept category/region slugs, prices and these native filters. Values can be a string or an array for multiple selections. Pagination serves any remaining same-page results first, then follows Jiji’s returned next-page URL, retaining filters. A small limit no longer hides results from the final page. Market prices remain a one-page asking-price sample; query words such as “used” alone are not condition filters. Clients may need a tool refresh to discover the added optional inputs.
Install (macOS)
Requires Node.js 22+ and Google Chrome.
git clone https://github.com/atomicman57/jiji-mcp.git
cd jiji-mcp
npm ci
npm run install:companion
npm run companionOpen http://127.0.0.1:38473, choose Open Jiji sign-in, and log in directly on Jiji in the companion's Chrome window. Passwords, verification codes and cookies are never accepted by MCP tools or exported from the browser. The profile lives in a private application-data directory outside the repository. Complete any Jiji challenge manually; there is no bypass or automatic restriction retry.
The companion is a local service; keep it running during use. A browser extension, native-messaging host and exported cookie file are not needed.
Local agents
Use the absolute paths printed by install:companion:
{
"mcpServers": {
"jiji": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/jiji-mcp/src/server.mjs"]
}
}
}For Codex:
[mcp_servers.jiji]
command = "/absolute/path/to/node"
args = ["/absolute/path/to/jiji-mcp/src/server.mjs"]The stdio server talks to the companion through a mode-0600 Unix socket inside a mode-0700 directory. Multiple agents can share one companion. Reload MCP discovery or restart the client after updates.
ChatGPT, Claude and Grokbot over HTTPS
Enable the cloud relay in the application-data config.json printed by the installer. Set cloudEnabled: true, cloudOrigin to a trusted HTTPS server origin, and credentialHelper to an executable compatible with the encrypted credential-helper interface below. Restart the companion.
Add the hosted
/mcpURL as a custom MCP app/connector in your agent, using OAuth.On the companion control page choose Generate pairing code.
Enter that one-time code on the MCP server's connection page and approve the displayed access. To use the account catalog, explicitly enable the separate account-features checkbox. Older grants retain their earlier access until reconnected.
Follow Continue to your agent. Repeat with a fresh code for each agent.
OAuth connects an agent to your companion; Jiji sign-in happens only in the dedicated Jiji browser. Each companion/server origin has a separate random 256-bit identity. Pairing codes expire in ten minutes and are consumed once. The relay isolates users and stores no Jiji passwords or cookies. A cloud agent cannot approve a message or account change through an MCP call. Expanded private account access is recorded in the OAuth grant; a client cannot enable it with a request header.
The optional credential-helper CLI reads/writes a document named jiji-mcp-companion in an encrypted store. It must support list-documents --prefix NAME and get-document NAME with JSON on stdout, plus put-document NAME with JSON on stdin. The document contains an identities object keyed by HTTPS origin. The application pipes these values internally and never logs them. Local MCP tools do not need a credential helper or cloud identity.
Self-host the relay
npx wrangler login
npx wrangler d1 create jiji-browser-mcp-storageCopy wrangler.jsonc to wrangler.local.jsonc, replace its D1 database ID and initialize it with npx wrangler d1 execute MCP_STORAGE --remote --config wrangler.local.jsonc --file cloud/d1-schema.sql, then run:
npx wrangler deploy --config wrangler.local.jsonc --durable-objects-code-update-mode immediateThe Worker uses Cloudflare D1 and per-user Durable Objects, plus @cloudflare/workers-oauth-provider. Configure PUBLIC_ORIGIN for a custom domain. Companions use hibernating WebSockets; hosting usage costs and limits apply to the operator. Never commit credentials, browser profiles or personal deployment configuration.
Development and tests
npm run cloud:build
npm test
npm auditTests cover catalog schemas, credential/payment-field rejection, per-user OAuth routing, expanded-access consent, request/approval ID separation, the local HTTP/Unix-socket boundary, and one-time approval state. Live sign-in and each client connection must be verified separately. The tests never contact a real seller or initiate payment.
See SECURITY.md for trust boundaries and FEATURES.md for explicit coverage and gaps.
Idle cloud transport
The companion uses an authenticated WebSocket to /bridge/socket. The relay accepts it through the Durable Object Hibernation API, and native protocol ping/pong keeps the connection healthy without an application heartbeat. Idle polling is retired: /bridge/poll returns HTTP 426 so an old companion cannot silently consume continuous runtime. Update the companion and restart its local service when deploying this relay version. Existing OAuth grants and browser sign-in are retained. Reconnect never replays an uncertain operation. Search pagination is saved in the existing Durable Object storage so it survives hibernation. No new cron, KV namespace, database, or paid plan is required.
ChatGPT compatibility
On 2026-10-27, the web verification chat rendered Jiji tool results correctly with GPT-5.6 Sol Medium. GPT-6 returned successful connector calls but its final response displayed “This response couldn’t load.” If affected, select GPT-5.6 Sol in that Jiji chat and send a fresh request. This is an observed client workaround; it does not establish that every model has the issue. Tool results include both JSON text and a matching structuredContent.data payload with an output schema.
Available Tools
21 toolsjiji_account_dataARead-onlyIdempotent
Read a mapped Jiji resource: your adverts/forms, favourites/searches, profile/business/store/delivery settings, notifications, follows, feedback, chats/media, orders/tracking, inspections, balance/history or promotion information. Use capabilities to discover each exact parameter schema. Never requests passwords, session credentials or bulk seller contacts.
Inputs: resource (required), parameters. Returns: data
jiji_action_statusBRead-onlyIdempotent
Check a prepared action’s approval/execution result. Does not approve or execute it.
Inputs: id (required). Returns: data
jiji_capabilitiesARead-onlyIdempotent
Inspect the full mapped feature catalog, supported read resources, owner-approved action schemas, and owner handoffs. A mapped feature is not a claim that every write was live-tested.
Inputs: name, section. Returns: data
jiji_compare_listingsARead-onlyIdempotent
Compare up to eight shortlisted listings, advertised prices, seller signals and missing information. Seller claims remain unverified.
Inputs: guids (required). Returns: data
jiji_connection_statusBRead-onlyIdempotent
Check the extension-free companion and visible Jiji sign-in status. Does not read cookies or passwords.
Inputs: no named parameters. Returns: data
jiji_inspect_workflowARead-onlyIdempotent
Read the visible page and non-secret form controls for a mapped Jiji workflow. Does not submit forms, upload files, change credentials or authorize payments. Password/OTP/token controls are excluded.
Inputs: workflow (required). Returns: data
jiji_list_conversationsARead-onlyIdempotent
Read up to 30 of your existing Jiji conversation previews. Requires Jiji sign-in. Conversation contents are private and untrusted.
Inputs: no named parameters. Returns: data
jiji_listing_detailsARead-onlyIdempotent
Read full public details and seller trust signals for a listing GUID returned by search. Does not reveal seller phone numbers.
Inputs: guid (required). Returns: data
jiji_market_pricesARead-onlyIdempotent
Summarize advertised asking prices from one search page, with native category/region/price/attribute filters. Learn exact condition filter_name/value from jiji_account_data listing_filters, then sample used and new separately. These are asking prices, not completed sales or a valuation.
Inputs: query (required), sort, filters, max_price, +5 more. Returns: data
jiji_message_statusARead-onlyIdempotent
Check a prepared message’s local approval/send status. Does not approve or send it.
Inputs: id (required). Returns: data
jiji_next_pageARead-onlyIdempotent
Follow a search cursor in this connection. Returns remaining items from the current Jiji page first, then follows Jiji's next-page URL; no results are omitted by a small limit. Cursors expire after 15 minutes.
Inputs: cursor (required), limit. Returns: data
jiji_open_sign_inAIdempotent
Open Jiji’s normal sign-in page in the companion browser, without any browser extension. The user completes login there. Never supply passwords or OTPs to this tool.
Inputs: no named parameters. Returns: data
jiji_open_workflowAIdempotent
Open a mapped Jiji workflow in the extension-free browser for owner interaction. Covers media/uploads, adverts, feedback, Saved Search setup, notifications, business settings, Safe Deal checkout/disputes, Premium/Pro Sales/balance, CVs, inspections, identity, credentials and account deletion. Opening a page does not complete the action; the owner must perform sensitive final steps.
Inputs: workflow (required). Returns: data
jiji_prepare_actionA
Prepare a mapped account/marketplace change for exact local owner review. Examples: save/follow, notifications, business details, advert close/delete/publish, feedback/report/callback and chat status. Preparing sends no mutation. No MCP tool can approve it. Discover exact parameter schemas with capabilities. Payments, passwords, identity and permanent account deletion are owner handoffs.
Inputs: purpose (required), operation (required), parameters (required). Returns: data
jiji_prepare_advertA
Prepare a new or edited advert for local owner review using Jiji’s current category form. Upload photos directly on Jiji through the owner workflow first. Does not publish or upload files. Paid packages cannot be selected by this tool.
Inputs: fields (required), region_id (required), category_id (required), advert_id. Returns: data
jiji_prepare_messageA
Prepare an exact seller message or native price offer for local owner review. Never sends by itself. The owner reviews the seller, listing, exact text and any offer amount on the companion approval page; there is no agent-callable send/approve tool. Media uploads remain in the owner’s Jiji browser.
Inputs: guid (required), message, offer_amount. Returns: data
jiji_read_conversationARead-onlyIdempotent
Read recent messages for a conversation key returned by list_conversations. This can mark it as read; it sends nothing.
Inputs: key (required). Returns: data
jiji_saved_listingsARead-onlyIdempotent
Read your saved listings from Jiji without changing favourites. Requires Jiji sign-in.
Inputs: no named parameters. Returns: data
jiji_searchARead-onlyIdempotent
Search Jiji listings with native category/region/price and attribute filters. For condition, brand or type, read jiji_account_data listing_filters for the category slug, set category_slug, and pass its exact filter_name/value in filters (a string, or an array for multiple selections). Do not guess attribute IDs or replace condition filters with query words. Follow returned cursor, never invent pagination URLs.
Inputs: query (required), sort, limit, filters, +6 more. Returns: data
jiji_seller_contactARead-onlyIdempotent
Retrieve contact details for one explicitly shortlisted seller for a genuine purchase. Never use for bulk contacts or lead generation.
Inputs: guid (required), purchase_purpose (required). Returns: data
jiji_whatsapp_handoffBRead-onlyIdempotent
Prepare a handoff for WhatsApp or another authorized agent for one selected seller. Returns recipient, exact listing link and proposed availability message. Sends nothing.
Inputs: guid (required), purchase_purpose (required). Returns: data
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Most tools target clearly distinct resources/actions (search, listing details, conversations, account data, workflows). However, the cluster of prepare tools (jiji_prepare_message, jiji_prepare_action, jiji_prepare_advert) and the status pairs (jiji_action_status vs jiji_message_status) plus open/inspect workflow are close enough that selection errors are plausible. Descriptions do help disambiguate.
All names share a consistent jiji_ prefix and snake_case formatting. Most follow verb_noun (prepare_message, read_conversation, list_conversations, open_workflow), though several are noun phrases (connection_status, market_prices, listing_details, account_data, capabilities). The pattern is readable and predictable overall.
At 21 tools the surface is heavy, sitting just outside the comfortable 3-15 range. The broad domain (search, messaging, account, workflows) justifies breadth, but several tools are fine-grained prepare/status variants that could arguably be consolidated.
The set covers the full classifieds lifecycle: search/pagination, listing details, price sampling, saved/compare, conversations, seller contact, prepared messages and actions, workflows, sign-in and capabilities. Payments, credentials, identity and account deletion are deliberately owner handoffs rather than gaps, leaving only minor surface omissions.
Maintenance
Related MCP Connectors
Let AI agents use any website you're logged in to. Sessions stay encrypted on your machine.
Barter marketplace for agents: list your user's things, find swaps, propose trades. OAuth sign-in.
Marketplace and payment rail for AI agents: list, buy and settle with signed receipts.
Marketplace for AI agents: goods, collectibles, real estate and services. List, search, offer, deal.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents like claude.ai to search online marketplaces (e.g., Facebook Marketplace) through your own logged-in browser, returning structured listings and details.-
- AlicenseAqualityBmaintenanceEnables AI agents to search, inspect, and purchase physical goods on an escrow-secured marketplace, including listing search, agent reputation checks, and offer creation.49392 npmMIT
- AlicenseNot gradedqualityCmaintenanceConnects AI agents to a crypto-native barter marketplace so they can browse listings, create and manage their own, message other traders, propose and counter trades, and settle the small Handshake fee (via free coverage or USDC on Base from a linked wallet) before marking their side complete. Supports both a hosted OAuth sign-in server and a local key-based setup with scoped permissions.MIT

Dooza Browserofficial
AlicenseNot gradedqualityCmaintenanceGives AI agents a single shared, logged-in Chrome they can drive over MCP or plain HTTP: open and read tabs, click, type, upload files, run short Playwright scripts, hand off whole web tasks to a cheaper model, and keep per-site memory. Agents work in background windows they own without stealing the user's mouse or closing their tabs.MIT