Vedara MCP developer and reviewer guide
Contract version 2.4.0. Reviewed 10 October 2026. English tool summaries with structured calculation data.
This documents the existing production MCP service. Muse admission, regional availability and end-to-end operation inside Muse are not yet verified. There are no checkout or payment tools.
Connect and discover
Endpoint: https://mcp.vedara.me/mcp. Transport: MCP Streamable HTTP, stateless requests, JSON responses. This endpoint is a tool service, not a REST inference API. Use a compatible MCP client. Readiness is at /health.
POST JSON-RPC requests with Content-Type: application/json and Accept: application/json, text/event-stream. Initialize with a supported MCP protocol version (for example 2025-03-26), then send notifications/initialized and tools/list. Send the negotiated MCP-Protocol-Version header on subsequent requests. No persistent MCP session is required.
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"vedara-review","version":"1.0"}}}
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_timing_activities","arguments":{}}}
Download all input/output schemas, annotations and synthetic arguments. Live tools/list is authoritative. The current output schema permits a generic object; the semantic envelope below is the stable interpretation contract. Do not assume every tool returns the same data keys.
{"status":"ok","data":{"...":"tool-specific calculated values"},"summary":"English summary","error":null}
{"status":"error","data":null,"summary":"Explanation","error":{"code":"birth_data_required","message":"Explanation","information_url":"https://vedara.me/dashboard/profile"}}
Consume MCP structuredContent when present. A confirmation preview is an intentional exception to null error data: its data.profile_write_preview contains the birth fields the caller supplied. Never echo this preview to another user.
Authentication and permissions
Seven public tools work without a Vedara login. The four saved-profile tools and two profile-write tools require OAuth 2.1 with PKCE (S256), an existing active Vedara account and its verified WorkOS identity. A complete birth profile is required for saved-profile calculations and updates; saving is for incomplete profiles. Do not send API keys, passwords or tokens in tool arguments or URLs.
Discover the authorization server from protected-resource metadata. Resource/audience: https://mcp.vedara.me/mcp, including the path. Follow the advertised authorization server metadata and supported client registration. Use the real client redirect URI. WorkOS AuthKit issues the OAuth grant. The current Standalone Connect flow redirects to Vedara for its normal password or Google sign-in, then returns to WorkOS for consent and token issuance. A separate WorkOS password does not replace the Vedara login. Never copy another integration's client secret.
openid: establish the authenticated subject.profile: provider identity claims.email: verified email used to resolve the Vedara account when required.offline_access: refresh capability requested from the authorization server.
These are identity scopes, not separate chart-read/write permissions. WorkOS controls the OAuth grant; Vedara validates signature, issuer, audience and time validity and resolves the connected account. Tools never accept a caller-selected user ID. Pass access tokens only in the HTTPS Authorization Bearer header. Supplied invalid credentials are rejected, even on public tools. Anonymous account-tool calls return an OAuth challenge before reading account data.
Disconnect in the connected client's settings and revoke the authorization with the provider as supported by that client. Existing access-token invalidation is subject to provider behavior and token expiry; an immediate invalidation time has not been certified for Muse. Disconnecting is separate from deleting your Vedara account or a public share. Use account deletion or hello@vedara.me for a data request.
All 13 tools
Ask for consent before sending birth data. Compatibility requires consent for both people. Astrology is reflective guidance, not medical, legal, financial or safety-critical advice. Never invent placements or transits absent from the result.
compute_chart
No account required. Calculate a Lahiri sidereal natal chart (a Kundli, Kundali, or Janam Kundali, the Vedic horoscope chart) from local birth date, local birth time, and either a place name or coordinates. Returns planetary positions and Ascendant. Use only after the user agrees to share birth details.
Result: Ascendant and sidereal planetary positions, signs and nakshatras. No personal narrative.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"birth": {
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"date",
"time"
],
"type": "object"
},
"language": {
"default": "en",
"type": "string"
}
},
"required": [
"birth"
],
"type": "object"
}Synthetic arguments
{
"birth": {
"date": "1990-08-15",
"time": "10:30",
"place": "London, UK",
"latitude": 51.5,
"longitude": -0.12,
"timezone": "Europe/London"
}
}analyze_doshas
No account required. Analyze Manglik (Mangal dosha), Kaal Sarpa, and Sade Sati indicators for supplied birth data. Returns structured calculations, not deterministic life outcomes.
Result: Structured Manglik, Kaal Sarpa and current Sade Sati indicators.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"birth": {
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"date",
"time"
],
"type": "object"
},
"language": {
"default": "en",
"type": "string"
}
},
"required": [
"birth"
],
"type": "object"
}Synthetic arguments
{
"birth": {
"date": "1990-08-15",
"time": "10:30",
"place": "London, UK",
"latitude": 51.5,
"longitude": -0.12,
"timezone": "Europe/London"
}
}get_dasha_timeline
No account required. Calculate the current Vimshottari mahadasha and a bounded timeline of planetary periods from supplied birth data, the starting point for career and relationship timing questions. Depth must be between 1 and 20.
Result: Current Vimshottari period and bounded period timeline. Depth is clamped to 1 through 20.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"birth": {
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"date",
"time"
],
"type": "object"
},
"depth": {
"default": 9,
"type": "integer"
},
"language": {
"default": "en",
"type": "string"
}
},
"required": [
"birth"
],
"type": "object"
}Synthetic arguments
{
"birth": {
"date": "1990-08-15",
"time": "10:30",
"place": "London, UK",
"latitude": 51.5,
"longitude": -0.12,
"timezone": "Europe/London"
}
}check_compatibility
No account required. Calculate traditional 36-point Ashtakoot (Guna Milan, gun milan, Kundli matching) compatibility for two consenting people, with Moon, Lagna, chart positions, and dosha flags. Do not frame the score as a command to start or end a relationship.
Result: Traditional 36-point Ashtakoot compatibility, both charts and dosha flags. A score is not an instruction to begin or end a relationship.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"person_a": {
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"date",
"time"
],
"type": "object"
},
"person_b": {
"properties": {
"date": {
"type": "string"
},
"time": {
"type": "string"
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"date",
"time"
],
"type": "object"
},
"language": {
"default": "en",
"type": "string"
}
},
"required": [
"person_a",
"person_b"
],
"type": "object"
}Synthetic arguments
{
"person_a": {
"date": "1990-08-15",
"time": "10:30",
"place": "London, UK",
"latitude": 51.5,
"longitude": -0.12,
"timezone": "Europe/London"
},
"person_b": {
"date": "1992-03-21",
"time": "10:30",
"place": "London, UK",
"latitude": 51.5,
"longitude": -0.12,
"timezone": "Europe/London"
}
}get_sky_now
No account required. Return sidereal planetary signs and nakshatras (the current gochar, or transit sky) for a date and IANA timezone. Defaults to today's date in UTC.
Result: Sidereal planetary positions for the requested date. Does not return Panchanga or Rahu Kaal.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"location_timezone": {
"default": "UTC",
"type": "string"
},
"language": {
"default": "en",
"type": "string"
}
},
"type": "object"
}Synthetic arguments
{
"date": "2026-10-10",
"location_timezone": "Europe/London"
}list_timing_activities
No account required. List every activity Vedara can search auspicious timing for, with its id, label, category and accepted aliases. Call this before find_auspicious_time and pass one of the returned ids as the activity.
Result: Supported activity IDs, labels and aliases. Use a returned ID in find_auspicious_time.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"language": {
"default": "en",
"type": "string"
}
},
"type": "object"
}Synthetic arguments
{}get_my_chart
OAuth account required. Return the connected user's saved sidereal birth chart (their Kundli) without exposing stored birth details or internal identifiers. Free with a connected Vedara account that has a completed birth profile. Operates only within the connected user's bounded private Vedara account. Uses saved or explicitly supplied coordinates and Vedara calculations, without public geocoding, web search, external recipients, or public publishing. Authentication, audit events, and rate limits are private account operations.
Result: Calculated chart for the authenticated account; excludes stored birth date/time, account identifiers and exact stored location.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"type": "object"
}Synthetic arguments
{}get_my_timing
OAuth account required. Return the connected user's current Vimshottari period and present sidereal transit snapshot (gochar), grounding for career and relationship timing questions. Free with a connected Vedara account that has a completed birth profile. Operates only within the connected user's bounded private Vedara account. Uses saved or explicitly supplied coordinates and Vedara calculations, without public geocoding, web search, external recipients, or public publishing. Authentication, audit events, and rate limits are private account operations.
Result: Current personal dasha/timing results for the authenticated account.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"type": "object"
}Synthetic arguments
{}find_auspicious_time
OAuth account required. Find personalized Muhurta (shubh muhurat) windows, the best date and time to start a named Vedara activity, over a maximum 32-day inclusive range. Dates use YYYY-MM-DD. Free with a connected Vedara account that has a completed birth profile. Operates only within the connected user's bounded private Vedara account. Uses saved or explicitly supplied coordinates and Vedara calculations, without public geocoding, web search, external recipients, or public publishing. Authentication, audit events, and rate limits are private account operations.
Result: Ranked suitable timing windows for a catalogue activity, or an empty set when none qualify. Maximum range is 32 days.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"activity": {
"type": "string"
},
"date_start": {
"type": "string"
},
"date_end": {
"type": "string"
},
"include_neutral": {
"default": false,
"type": "boolean"
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"activity",
"date_start",
"date_end"
],
"type": "object"
}Synthetic arguments
{
"activity": "creative_work",
"date_start": "2026-10-10",
"date_end": "2026-10-12"
}save_my_birth_profile
OAuth account required. Save a complete birth date, birth time, and birth place to the connected user's Vedara account when no complete birth profile is already saved. Requires confirmed_profile_write to be true after confirming the exact details with the user. Replaces any partial birth details, clears cached calculations, and starts recalculation.
Result: Without confirmation: confirmation_required plus a preview of the supplied birth fields. With confirmation: profile_status, fields_written and recalculation=started. Refuses an already complete profile.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"birth_date": {
"type": "string"
},
"birth_time": {
"type": "string"
},
"birth_place": {
"type": "string"
},
"confirmed_profile_write": {
"type": "boolean"
},
"birth_latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"birth_longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"birth_timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"birth_date",
"birth_time",
"birth_place",
"confirmed_profile_write"
],
"type": "object"
}Synthetic arguments
{
"birth_date": "1990-08-15",
"birth_time": "10:30",
"birth_place": "London, UK",
"birth_latitude": 51.5,
"birth_longitude": -0.12,
"birth_timezone": "Europe/London",
"confirmed_profile_write": false
}update_my_birth_profile
OAuth account required. Update the complete birth date, birth time, and birth place stored in the connected user's Vedara account. Requires confirmed_profile_write to be true after confirming the exact details with the user. Clears cached calculations and starts recalculation.
Result: Without confirmation: confirmation_required plus a preview of supplied fields. With confirmation: profile_status, fields_written and recalculation=started. Requires an existing complete profile.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"birth_date": {
"type": "string"
},
"birth_time": {
"type": "string"
},
"birth_place": {
"type": "string"
},
"confirmed_profile_write": {
"type": "boolean"
},
"birth_latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"birth_longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"birth_timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"birth_date",
"birth_time",
"birth_place",
"confirmed_profile_write"
],
"type": "object"
}Synthetic arguments
{
"birth_date": "1990-08-15",
"birth_time": "10:30",
"birth_place": "London, UK",
"birth_latitude": 51.5,
"birth_longitude": -0.12,
"birth_timezone": "Europe/London",
"confirmed_profile_write": false
}today_for_me
OAuth account required. What should I know about today: return raw deterministic Panchanga (Panchang), caution windows including Rahu Kaal (Rahu Kalam), Tara and Chandra Bala, and current dasha facts for the connected user's day. Requires a completed saved Vedara birth profile; The connected client provides any interpretation. Operates only within the connected user's bounded private Vedara account. Uses saved or explicitly supplied coordinates and Vedara calculations, without public geocoding, web search, external recipients, or public publishing. Authentication, audit events, and rate limits are private account operations.
Result: Daily Panchanga and personal timing periods using the supplied coordinates or saved location. Location output is limited to source, timezone and local_date.
Input schema and synthetic example
Input schema
{
"additionalProperties": false,
"properties": {
"date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null
},
"location_timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"language": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
},
"type": "object"
}Synthetic arguments
{
"date": "2026-10-10",
"location_timezone": "Europe/London"
}Errors, limits and retries
| Code or status | Client action |
|---|---|
| HTTP 401/403; account_required | Connect the correct account or refresh authorization. Do not fall back to somebody else's profile. |
| birth_data_required | Complete the profile through the linked account page, or use the confirmed save flow. |
| confirmation_required | Show the supplied-field preview, obtain explicit confirmation, then call the write tool with confirmed_profile_write=true. |
| birth_data_invalid; geocoding_failed | Ask the user to correct the inputs. Do not guess an exact birth time or place. |
| not_found | Refresh supported activities with list_timing_activities and choose a returned ID. |
| rate_limited | Wait for the current hourly window. Do not loop or change identity to evade the limit. |
| upstream_unavailable; timeout | Retry reads with bounded backoff. Do not automatically repeat sharing or profile writes after an ambiguous result. |
| plan_required | Dormant compatibility code. The current connector is free; it is not a checkout instruction. |
Per hour: get_my_chart and get_my_timing 60 each; today_for_me and find_auspicious_time 30 each; each profile-write tool 5 per verified subject; share_chart 10 per verified subject or one shared anonymous bucket. Public calculation tools have no separately configured per-tool quota. Infrastructure protection can still reject requests. Profile writes and sharing fail closed if their limiter is unavailable; personalized reads currently fail open. Date-search windows are at most 32 days. No availability SLA is claimed.
Data handling, consent and side effects
- Calculation inputs: birth date, time and place or coordinates are used for the requested result. Public calculations do not save an account birth profile. With place-only input, the place label is sent to OpenStreetMap Nominatim; explicit coordinates and timezone avoid that lookup. Birth dates and times are not part of the geocoder request.
- Saved profiles: account birth fields are encrypted in the Vedara database. Read tools use the connected account only and do not return exact stored birth fields.
today_for_meuses optional current coordinates for calculation without echoing them. - Profile writes: show exactly which date, time and place will be stored, obtain explicit confirmation, then set
confirmed_profile_write=true. The server returns a preview without writing when false. A confirmed save can replace partial fields; update replaces existing fields. Both invalidate derived caches and start account recalculation. Tool results and downstream recalculation use ephemerides and rule tables; no LLM interpretation is requested by these tool handlers. - Public sharing: obtain a separate explicit request to publish before calling
share_chart. There is no confirmation boolean on this tool, so the client must enforce that interaction. The share is accessible to anyone with the link and contains chart output, birth date/place label and an optional display name. Birth time and coordinates are not stored in the share row. Do not share another person's information without consent. - Operational records: all accepted tools append an audit event. Records can include tool/status, duration, language, entitlement, internal user/correlation IDs, bounded catalogue activity and range categories, and hashed client-reported subject/session identifiers where supplied. Those hashes are pseudonymous, not proof of a unique person or of Muse attribution. Tool audit details exclude prompts, full arguments, results, emails and exact birth values. Failure text at the MCP audit boundary is redacted; separate account-recalculation and provider operational records have their own handling.
- Retention and removal: account data remains while needed for the account, subject to deletion requests and necessary retained records described in the privacy notice. Public shares persist until separately revoked; account deletion does not automatically remove every share. Include share URLs in a removal request. Support verifies ownership and can revoke the public page. Operational audit records have no universal automatic purge interval certified by this review. Provider logs and backups are handled separately. OAuth disconnection alone does not delete stored data.
All tools advertise readOnlyHint=false and idempotentHint=false because they append audit events. Profile-write tools additionally advertise destructiveHint=true. Geocoding-capable tools and public sharing advertise openWorldHint=true. The catalogue contains each tool's exact annotations. No tool starts checkout, purchases, books an appointment or sends messages to third parties on the user's behalf.
See the Privacy Policy, Terms of Service and WorkOS privacy information. Connected clients handle your conversation and tool results under their own policies. Listing approval is not a privacy certification.
Synthetic reviewer workflow
Public calculation tests require no credentials. Use the synthetic fixture 15 August 1990, 10:30, London, latitude 51.5, longitude -0.12, Europe/London. It represents no real customer. Never use your own or a customer's birth profile for destructive tests.
- Initialize and list tools. Confirm all 13 names, schemas, security metadata and annotations.
- Run compute_chart, analyze_doshas, get_dasha_timeline and check_compatibility with synthetic inputs; run get_sky_now and list_timing_activities. Validate structured results. Do not treat the fictional data as advice.
- Call get_my_chart without credentials. Expect account_required and an OAuth challenge. A supplied invalid token should be rejected at HTTP level.
- For account tools, use a dedicated synthetic reviewer identity supplied separately through the platform's secure credential channel. Follow hosted OAuth/PKCE. Confirm the connected account, then test get_my_chart, get_my_timing, today_for_me and find_auspicious_time with an activity returned by discovery.
- On a separate incomplete synthetic profile, call save_my_birth_profile with confirmation false and prove there is no change. After explicitly confirming the fixture, save, read the chart, then update after a second confirmation. Restore the fixture afterwards. A repeated save on a complete profile must refuse.
- Only after explicitly choosing to publish the synthetic fixture, call share_chart. Verify the public page, then request takedown with its URL and verify that it is unavailable. Keep the share URL private to the test record.
- Disconnect/revoke the review grant and test old access/refresh credentials in the actual client until the effective boundary is known. Record the observed expiry and revocation behavior. Run deletion checks on a separate disposable synthetic account, including public-share removal. Do not delete the ongoing reviewer account.
Credential handoff: credentials are never published in this guide, the tool schema, repository, chat or query strings. Reviewer provisioning and authenticated sign-in must be verified before credentials are handed over. Use the platform's authenticated secure intake only, with owner approval. Real Muse OAuth, revocation, rendering and full end-to-end tests remain platform-dependent until a test environment is granted. Public MCP checks alone do not establish Muse compatibility.
Technical support: support@vedara.me. Privacy/removal requests: hello@vedara.me.