@eo-studio-dev/veda-mcp
v0.3.0
Published
Veda House MCP server for Claude Code
Readme
@eo/veda-mcp
Veda House MCP server for Claude Code. Exposes Veda APIs as MCP tools over stdio so the whole team can talk to Veda from Claude Code with a single shared config.
The repo root ships a .mcp.json that points Claude Code at this package's
build output (server/veda-mcp/dist/index.js), so once it's built every
teammate gets the same veda-house MCP server automatically.
Requirements
- Node.js >= 20
- npm (this package is intentionally not part of any workspace; install and build it directly from this directory)
Install & build
cd server/veda-mcp
npm install
npm run build
npm run setup # installs Playwright Chromium for the browser login flowAfter building, restart Claude Code so it picks up dist/index.js via the
root .mcp.json.
First-time login
The first time you call a tool that hits the Veda backend (anything other
than veda_ping), the server triggers veda_auth, which:
- Opens a headed Chromium window automatically.
- Sends you to
https://www.veda25.net/login— sign in with your@eoeoeo.netGoogle account. - Captures the
veda-tokencookie and caches it at~/.veda-mcp/token.json(mode0600).
The cached JWT is reused until it expires (Veda issues 24h tokens). When it does, the next call re-opens the browser to refresh it. Nothing about the login is committed to the repo — tokens live only in your home directory.
To force a re-login, delete ~/.veda-mcp/token.json.
Available tools
Health & auth
| Tool | Description |
| ----------- | -------------------------------------------------------------------------------------------- |
| veda_ping | Health check. Returns the configured VEDA_API_URL / VEDA_LOGIN_URL. |
| veda_auth | Ensure a valid Veda auth token is cached. Opens the browser login flow if needed. |
Applications
| Tool | Description |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| list_applications | List Veda House stay applications. Optional status filter (PENDING/PROCESSING/ACCEPTED/REJECTED). |
| approve_application | Approve a PENDING application. Creates a pending schedule, generates a Stripe payment link, and emails the guest. |
| decline_application | Decline a PENDING application (marks REJECTED). |
| assign_application | Assign a HouseAdmin/HouseManager as the application owner. Pass null to clear. |
| list_assignable_users | List staff (HouseAdmin/HouseManager) who can be assigned. Optional q substring filter. |
Schedules
| Tool | Description |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| veda_list_schedules | List schedules for a room (defaults to -30/+30 days when range omitted). Filter by statuses. |
| veda_cancel_schedule | Cancel a schedule. Requires HouseAdmin/Manager/Member or the contact's own email. |
| veda_get_available_checkin_dates | Available check-in dates (defaults to today through today + 60 days). |
| veda_get_maximum_stay | Maximum allowed stay (days). Defaults to 14, backend caps at 100. |
Contacts
| Tool | Description |
| --------------------- | -------------------------------------------------------------------------------------------------------- |
| veda_list_contacts | List all guest contact profiles with their applications. |
| veda_get_contact | Get a single contact profile by ID. |
| veda_create_contact | Create / upsert a guest contact. Requires HouseAdmin or HouseManager role. |
Rooms
| Tool | Description |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------- |
| veda_list_rooms | List all rooms with gender priority, color, and beds. |
| veda_list_beds | List beds for a room. Correlate by bed_id with veda_list_schedules to inspect current bookings per bed. |
Projects
| Tool | Description |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------- |
| veda_list_projects | List all Veda projects with resource matrix (B_ROLL/ORIGINAL/CLEAN/FINAL × LOADED/EMPTY) and storage locations used. |
| veda_get_project | Get one project with its resources, by project_id (preferred) or slug. |
| veda_search_projects | Case-insensitive substring search across project slug, category, and description. |
| veda_create_project | Create a new project. Requires slug and storage (must match an active storage location name). |
Resources
| Tool | Description |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| veda_list_storage_locations | List storage locations with capacity stats. Use these names for veda_create_project.storage and veda_upload_file.storage. |
| veda_upload_file | Upload a local file (≤500 MB) to a project's NAS section (ORIGINAL / B_ROLL / CLEAN / FINAL). Returns the created Resource. |
| veda_list_resources | Paginated resource listing with filters: project_id, type, status, storage, tags, date_from/date_to, free-text q. |
| veda_browse_nas | List files and folders on a NAS storage at folder_path (defaults to the share root). Supports offset/limit pagination. |
Configuration
Config comes from the root .mcp.json. Supported env vars:
| Variable | Default | Purpose |
| ---------------- | --------------------------- | --------------------------------------------- |
| VEDA_API_URL | https://api.veda25.net | Veda backend base URL used by API tools. |
| VEDA_LOGIN_URL | https://www.veda25.net | URL the browser opens to capture the cookie. |
No secrets belong in .mcp.json. Per-user credentials live under
~/.veda-mcp/ after the first login.
Troubleshooting
- Claude Code doesn't see the server. Make sure
dist/index.jsexists (npm run build) and restart Claude Code so it reloads.mcp.json. - Tool changes don't show up. Rebuild (
npm run build) and restart Claude Code — the stdio server is launched once per session. - Login window doesn't open. Run
npm run setupto install the Playwright Chromium binary, then retry. - Need to re-authenticate. Delete
~/.veda-mcp/token.jsonand call any Veda tool; the browser login will re-open.
Scripts
| Script | What it does |
| ------- | --------------------------------------------------------- |
| build | tsc → emits ESM to dist/, then restores the shebang. |
| dev | tsc --watch for local iteration. |
| start | Runs the built server directly (node dist/index.js). |
| clean | Removes dist/. |
| setup | Installs Playwright Chromium for the login flow. |
Why not a root workspace?
The repo root has no workspaces field — client/ is its own yarn
workspace and the rest of server/ is Rust. Keeping veda-mcp
self-contained matches the documented onboarding flow (cd server/veda-mcp
&& npm install && npm run build) and avoids introducing a top-level npm
workspace just for one package.
