evand-mcp
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., "@evand-mcp find upcoming AI workshops in Tehran under 500,000 toman"
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.
evand-mcp
An unofficial Model Context Protocol server for Evand (ایوند) — the Iranian platform for discovering events, webinars, conferences, workshops and courses.

It exposes Evand's public event data as read-only MCP tools, so assistants such as Claude, Cursor, VS Code Copilot and other MCP clients can search events, inspect ticket prices and availability, read descriptions, and find organizers. Purchases always happen on evand.com.
Unofficial project. Not affiliated with or endorsed by Evand. It uses the same public, unauthenticated API endpoints as the evand.com website. Those endpoints are undocumented and may change or rate-limit requests at any time.
Features
Search upcoming events in Persian or English, with filters for city, category, online/in-person, price range, start date and sort order.
Search the archive of past events (
include_past: true).Get full event details: description, speakers, schedule/showtimes, tickets with remaining capacity, prices, venue and map coordinates, organizer, category, tags and refund policy.
Get Evand's recommended similar events.
Discover the exact city and category slugs used by Evand, including a resolver for common English aliases (
tehran,isfahan,technology,ai,fintech, …).Find and inspect event organizers and their upcoming or past events.
No API key, login, cookie or scraping required.
Built-in retries, timeouts and a 10-minute cache for city/category metadata.
All prices are in Iranian Toman. All dates are rendered in Asia/Tehran time. Event names and descriptions remain in their original Persian.
Related MCP server: DICE MCP
Tools
Tool | Purpose | Key arguments |
| Search public events. Returns compact event cards and pagination. |
|
| Full details for one event, including description, tickets and showtimes. |
|
| Events recommended by Evand as similar to a given event. |
|
| Cities with events, event counts and province names. |
|
| Top-level and child categories with slugs and parents. |
|
| Find event organizers by name. |
|
| Organizer profile plus their upcoming or archived events. |
|
Filter resolution
city and category accept a Persian name, a Persian slug, or a common English alias. The server resolves them against Evand's live metadata before calling the events API:
city: "tehran" -> cities=تهران
city: "اصفهان" -> cities=اصفهان
city: "tehran,karaj" -> cities=تهران,کرج
category: "AI" -> categories=هوش مصنوعی
category: "fintech" -> categories=فین-تک
category: "مالی" -> categories=مالیIf a name cannot be resolved, the tool returns an error with nearby suggestions instead of silently returning irrelevant events. Use list_cities or list_categories when in doubt.
Sorting
| Meaning |
| Soonest first (default, same as Evand's «زمان») |
| Evand's popular/trending ordering |
| Most tickets sold |
| Random order |
| Sorted by start date |
Quick start
Requirements: Node.js 20+ (Node 22/24 recommended) and npm.
git clone https://github.com/Hr-ArshA/evand-mcp.git
cd evand-mcp
npm install
npm run build
node dist/index.jsThe server speaks MCP over stdio. A bare node dist/index.js waits for a client on stdin; it is not meant to be used interactively.
Claude Code
claude mcp add evand -- node /absolute/path/to/evand-mcp/dist/index.jsClaude Desktop
Add this to claude_desktop_config.json:
{
"mcpServers": {
"evand": {
"command": "node",
"args": ["/absolute/path/to/evand-mcp/dist/index.js"]
}
}
}Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"evand": {
"command": "node",
"args": ["/absolute/path/to/evand-mcp/dist/index.js"]
}
}
}VS Code (MCP)
Add to .vscode/mcp.json:
{
"servers": {
"evand": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/evand-mcp/dist/index.js"]
}
}
}Other clients
Use node /absolute/path/to/evand-mcp/dist/index.js as a stdio MCP command.
To install from GitHub Packages (requires a GitHub token with read:packages in ~/.npmrc for @hr-arsha:registry=https://npm.pkg.github.com):
npm install -g @hr-arsha/evand-mcpThen run evand-mcp directly as the MCP command.
Example prompts
«رویدادهای هوش مصنوعی آنلاین هفته آینده را پیدا کن و قیمت بلیتهایشان را بگو.»
"Find tech events in Tehran this month under 1,000,000 Toman and summarize the speakers."
"Show me the details and remaining tickets for https://evand.com/events/devops-w8"
"What events are similar to
creditfirst?""Which organizers in Iran have the most followers on Evand? Show their upcoming events."
"List Evand's categories and the cities with the most events."
Example calls and results
search_events:
{
"query": "هوش مصنوعی",
"city": "tehran",
"online": true,
"start_date_from": "2026-11-10",
"start_date_to": "2026-11-30",
"sort": "nearest",
"per_page": 5
}returns:
{
"filters": {
"query": "هوش مصنوعی",
"city": { "name": "تهران", "slug": "تهران" },
"online": true,
"start_date": { "from": "2026-11-10", "to": "2026-11-30", "timezone": "Asia/Tehran" },
"sort": "nearest"
},
"pagination": { "total": 44, "current_page": 1, "total_pages": 9, "has_more": true },
"events": [
{
"id": 25024740,
"name": "آیا DevOps بدون دخالت انسان هم میتواند کار کند؟",
"slug": "devops-w8",
"url": "https://evand.com/events/devops-w8",
"start_date": "2026-11-10T19:00:00+03:30",
"start_date_tehran": "2026-11-10 19:00",
"online": true,
"city": null,
"organization": { "name": "ابرها", "slug": "abrha", "url": "https://evand.com/organizations/abrha" },
"price": { "min": 0, "max": 0, "is_free": true, "currency": "Toman", "display": "Free" },
"status": { "ended": false, "sold_out": false, "cancelled": false, "partnership": null }
}
]
}get_event accepts either "devops-w8" or "https://evand.com/events/devops-w8" and adds description sections, speakers, showtimes, ticket tiers and availability, map data, organizer details and refund policy.
Availability and prices are a snapshot of Evand's public API. They can change before checkout; always confirm on the event page.
Configuration
Environment variable | Default | Description |
|
| Evand API base URL (useful for a proxy/mock) |
|
| Base URL used to build human-facing event/org/city links |
|
| Per-request timeout in milliseconds (clamped to 1000–60000) |
| unset | Set to |
MCP uses stdout for protocol messages, so the server never writes logs to stdout. Debug output goes to stderr.
Development
npm install
npm run typecheck # TypeScript, no emit
npm test # unit tests (mocked fetch, no network)
npm run smoke # live API smoke test (network)
npm run dev # run the MCP server from TS sources
npm run build # compile to dist/The unit tests cover HTML-to-text conversion, date/price formatting, city/category resolution, URL/slug parsing, API query construction, error handling and event normalization. npm run smoke exercises every tool against the live service.
How it works
src/index.ts stdio entry point
src/server.ts MCP server + tool registration (Zod input schemas)
src/evand.ts Evand API client, caching, retries, response normalization
src/resolver.ts city/category aliases and matching
src/format.ts HTML-to-text, Tehran time, Toman price formattingThe client talks to the public endpoints used by evand.com itself:
GET /v2/events— search/list withq,cities,categories,online,archive,min_price,max_price,min_start_date,max_start_date,sort,page,per_pageGET /events/{slug}?include=…— event detailGET /events/{slug}/description— structured description sectionsGET /recommendation/events/{slug}/similar— recommendationsGET /cities?include=province&sort=eventCountGET /categories?include=children&order=-1&sort=eventCountGET /organizations,GET /organizations/{slug}GET /v2/events?organization_id=…— an organizer's events
No authentication is required for any of these reads.
Limitations
Read-only: you cannot buy tickets, log in, register, follow organizers or create events. Direct the user to the event's
registration_url.Unofficial API: Evand may change endpoints, add rate limits or block automated clients without notice. The server includes retries, timeouts and polite metadata caching, but cannot guarantee availability.
Archive search: with
include_past: true, Evand's archive is very large and not always meaningfully ordered. Combine it withquery,city,categoryor date filters.Availability data: ticket counts are public counters and may lag behind actual sales or reservations.
Persian content: search and result quality is best in Persian. English aliases only resolve city/category filters; free-text
queryis sent to Evand as-is.Descriptions can be long: use
max_description_charsto cap them (default 8,000).No images in tool output by default: cover/logo URLs are returned as links.
Privacy and terms
The server sends only the search terms and filters you provide to api.evand.com. It stores no user data, requires no credentials and does not write to Evand. Metadata is cached in memory for 10 minutes per process. Please respect Evand's terms of service and avoid high-volume automated querying.
License
MIT. See LICENSE.
Available Tools
7 toolsget_eventGet Evand event detailsARead-onlyIdempotent
Get full public details for a single Evand event: description, speakers/organizers, schedule/showtimes, tickets and remaining capacity, price, venue/location, organizer, categories, tags and refund policy. Accepts an event slug (from search_events) or a full https://evand.com/events/ URL. Use include_description=false for a smaller response.
Inputs: slug (required), include_description, max_description_chars.
get_organizationGet Evand organizerARead-onlyIdempotent
Get an Evand organization's profile (bio, logo, social links, followers, event counts) and, by default, its current/upcoming events. Accepts an organization slug or full https://evand.com/organizations/ URL. Set include_past_events=true to list archived events instead.
Inputs: slug (required), events_limit, include_events, include_past_events, +1 more.
get_similar_eventsGet similar Evand eventsARead-onlyIdempotent
Get Evand's recommendations for events similar to a given event. Useful for 'what else is like this?' follow-ups. Accepts a slug or full Evand event URL.
Inputs: slug (required), limit.
list_categoriesList Evand categoriesARead-onlyIdempotent
List Evand event categories and subcategories with their slugs, parent categories and event counts. Use the slug or title as the category filter in search_events.
Inputs: limit, query.
list_citiesList Evand citiesARead-onlyIdempotent
List Iranian cities that have events on Evand, with event counts and the slug to pass to search_events. Results are sorted by event count. Use this when a city filter is ambiguous or you need the exact spelling.
Inputs: limit, query, include_empty.
search_eventsSearch Evand eventsARead-onlyIdempotent
Search upcoming public events on Evand (evand.com) by Persian/English keyword, city, category, online status, price and start date. Returns compact event cards with slugs and URLs plus pagination. Set include_past=true to search Evand's archive of past events. If a city or category is rejected, call list_cities or list_categories to discover the accepted names/slugs.
Inputs: city, page, sort, query, +8 more.
search_organizationsSearch Evand organizersARead-onlyIdempotent
Search organizations that host events on Evand, by name. Returns follower/event counts and the organization slug. Sort by followers (default), bestsellers, or partnerships. Use get_organization for full details and their events.
Inputs: page, sort, query, per_page.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool maps to a distinct resource+action: single-event lookup, similar-event recommendation, event search, organization get/search, and city/category enumeration. The only mild overlap is that get_organization returns events by default, which partially overlaps with event search results, but the descriptions make the intended usage clear.
All names are snake_case verb_noun with a predictable semantic split: get_* for single-resource fetch, search_* for filtered queries, list_* for enumerations. No style mixing or vague verbs.
Seven tools is well-scoped for a read-only public events API, with no filler tools. Each tool covers a necessary part of the discovery flow (find -> inspect -> expand -> disambiguate filters).
The discovery lifecycle is well covered: search, detail, similar events, organizations, and filter lookups for cities/categories. Minor gaps exist for first-class entity lookups such as venues/speakers or a direct category/city detail tool, but these are largely inlined in get_event or reachable via list_* tools.
Maintenance
Related MCP Connectors
Find concerts, theatre, sport and festivals in Sweden. Authless, read-only MCP.
Search upcoming public events in Israel by date, city, region or category. Read-only; no API key.
Event ticketing: create and publish events, read orders, attendees and sales analytics.
Read-only search of upcoming local events worldwide: music, comedy, AI/tech, arts, food, sports.
Related MCP Servers
- AlicenseBqualityAmaintenanceRead-only MCP server for accessing Eventbrite tickets, orders, organizer data, and public event search (including undocumented consumer search via browser bridge).31336 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables browsing live event, venue, and lineup listings city by city, with optional category filtering for gigs, club nights, comedy, theatre, and talks. Also returns full detail for any single event, including dates, venue and address, on-sale window, starting price, billed artists, and highlights such as age restrictions.93 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover upcoming events in a given city, optionally filtered by category slug or free-text keyword. It also retrieves full detail for a single event, including description, timing, venue, organizer, and ticket price range and availability.100 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to browse curated city event feeds, retrieve full details for individual events, and list an organizer's public calendar without authentication. It returns only public event metadata, stripping attendee, guest, host, and manager data before responding.146 npmMIT