Waktu Solat MCP
Click on "Install 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., "@Waktu Solat MCPGet today's prayer times for WLY01"
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.
Waktu Solat MCP
MCP server for Malaysian prayer times via api.waktusolat.app. Works with Claude, Cursor, and other MCP clients.
Tools: get_prayer_times_today, get_prayer_times_month, get_next_prayer, list_zones
Zone codes (important)
Prayer tools require a JAKIM zone code (for example: WLY01, SGR01, JHR01).
If you are unsure which code to use, run:
list_zones()to see all zoneslist_zones("SGR")to filter by state code (examples:SGR,JHR,WLY)
Example prompts in Claude/Cursor:
"List all Selangor zones"
"Get today's prayer times for
WLY01""What's the next prayer for
SGR01?"
Related MCP server: Zmanim MCP Server
Local (stdio)
uv sync
uv run waktusolat-mcpClaude Desktop config:
{
"mcpServers": {
"waktusolat": {
"command": "uv",
"args": ["--directory", "/path/to/waktu-solat-mcp", "run", "waktusolat-mcp"]
}
}
}Claude Code (local stdio server):
claude mcp add --transport stdio waktusolat -- \
uv --directory /path/to/waktu-solat-mcp run waktusolat-mcpVerify in Claude Code:
claude mcp list
claude mcp get waktusolatAfter connecting, try:
"When is Maghrib in
WLY01today?""Show me prayer times this month for
SGR01"
Hosted (HTTP)
Public deployment (Railway):
Web UI:
https://web-production-99037.up.railway.app/MCP endpoint:
https://web-production-99037.up.railway.app/mcp
Run with HTTP transport to serve a web UI with "Add to Cursor" / "Add to Claude" buttons:
uv run waktusolat-mcp-httpOr: MCP_TRANSPORT=streamable-http uv run waktusolat-mcp
Web UI:
http://localhost:8000/MCP endpoint:
http://localhost:8000/mcp
Claude Code (remote HTTP server):
claude mcp add --transport http waktusolat https://web-production-99037.up.railway.app/mcpThen run /mcp inside Claude Code to check connection/auth status.
Deploy to Railway, Render, etc. Set PORT (PaaS usually provides this). The app binds to 0.0.0.0 and uses PORT automatically. If behind a proxy, set MCP_BASE_URL to your public URL (for example this app uses https://web-production-99037.up.railway.app) so install links use the correct URL.
Docker
docker compose up --build
# Web UI: http://localhost:8000/
# MCP: http://localhost:8000/mcpAvailable Tools
4 toolsget_next_prayerB
Get the next upcoming prayer time for the given zone. If all prayers today have passed, returns next day's Fajr/Subuh.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It does disclose the rollover behavior (next day's Fajr/Subuh), which is genuinely useful behavioral detail. However, it doesn't mention what timezone the returned time is in, output format, or any edge cases beyond the rollover. Given this is a read-only lookup, the disclosure is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. The purpose and the key edge-case behavior are both conveyed efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only one parameter and a simple deterministic behavior, so the description is close to sufficient. However, with an output schema present, the return format is partially covered by the schema, but the zone-format gap and lack of usage guidance vs siblings leave some contextual incompleteness. An output schema exists, reducing the need to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. The description mentions 'zone' as the input concept but provides no format for it (e.g., what zone strings look like, whether it maps to the sibling list_zones). The single parameter is largely unexplained beyond its name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb+resource: 'Get the next upcoming prayer time for the given zone.' It differentiates from siblings by focusing on the next upcoming prayer rather than a full-day or month listing, though it doesn't explicitly name the sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the fallback behavior (returns next day's Fajr if all today's prayers passed), which implies when to use this tool versus checking all of today's prayers. However, it doesn't explicitly contrast with get_prayer_times_today or get_prayer_times_month, nor does it mention zone-format requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prayer_times_monthC
Get prayer times for all days in a given month. Zone codes follow JAKIM format (e.g. SGR01).
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| zone | Yes | ||
| month | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided for this read operation, so the description carries the full burden of disclosure. It doesn't state whether invalid zone codes cause errors, whether the operation is read-only/safe, what happens with invalid month/year values, or the response format. The zone format hint (JAKIM) is useful but the description lacks broader behavioral clarity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences with no wasted words. The purpose statement and zone format hint are both relevant. It's appropriately compact for its scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is an output schema, which helps with return-value understanding. Given the modest complexity (3 simple parameters for a read operation), the description covers the core purpose and one key data-format detail. However, it omits error behavior for invalid inputs and does not discuss month/year bounds, making it a minimum-viable but not thorough description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the three parameters. It only mentions the zone format (JAKIM format with example SGR01), offering no guidance on year/month ranges, constraints, or relationships between parameters. The description adds minimal value beyond what the bare field names imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb+resource ('Get prayer times') with scope ('for all days in a given month'), which is clear. However, it doesn't explicitly distinguish from siblings like get_prayer_times_today beyond the month scope, though the month phrasing and sibling names make the distinction reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance is given. The description implies this is for monthly retrieval (vs daily for get_prayer_times_today), but there is no discussion of when to choose one over another or any context about valid zones or required format beyond a single example (SGR01).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prayer_times_todayA
Get prayer times for today in the given zone. Zone codes follow JAKIM format (e.g. SGR01, WLY01). Returns times in Malaysia time (MYT, UTC+8).
| Name | Required | Description | Default |
|---|---|---|---|
| zone | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It does state the return timezone (MYT, UTC+8), which is useful. However, it doesn't disclose what fields the response contains, whether zone validity is checked, or error behavior for invalid zones. The timezone disclosure is genuinely helpful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero waste. Each sentence serves a purpose: defining the scope (today, zone), specifying zone format, and clarifying timezone. Exceptionally tight and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 required param) with an output schema present, so the description doesn't need to explain return format. It covers the zone format and timezone semantics. It's slightly incomplete regarding validation behavior and whether open-ended zones are accepted vs only those from list_zones, but for a single-param tool with output schema this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the zone parameter. It does explain the zone format (JAKIM, e.g. SGR01, WLY01) and gives examples, which adds real meaning beyond the schema. However, it doesn't indicate whether the zone must map to a listed zone from list_zones, which would be useful given that sibling tool exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb+resource (get prayer times for today) and scopes it to 'today' in 'the given zone'. It distinguishes from siblings by highlighting the 'today' scope vs get_prayer_times_month. However, it doesn't explicitly differentiate from get_next_prayer, so it loses a point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly conveys usage by scoping to 'today' and a specific zone format, which differentiates it from the month tool. However, there are no explicit when-to-use or exclusion statements, nor mention of when get_next_prayer or list_zones would be preferable. The zone code format note (JAKIM) is helpful context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_zonesB
List JAKIM prayer zone codes with area descriptions. Optionally filter by state code (e.g. SGR, JHR, WLY).
| Name | Required | Description | Default |
|---|---|---|---|
| state | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It's a read/list operation, which is inferable but never stated explicitly. It doesn't describe output format, pagination, or whether an empty/invalid state returns all zones or an error. With zero annotations, more could be disclosed, but the nature is fairly benign.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary purpose. Efficient and easy to scan. Could be slightly more descriptive without bloating, but overall tight and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and a single optional param, this is a simple tool. The description covers the core purpose and the key parameter adequately. However, it's missing the default-when-no-state behavior and doesn't confirm whether all zones are returned when no filter is applied—small but relevant gaps for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (no param descriptions), so the description must compensate. It does explain the `state` parameter with example codes (SGR, JHR, WLY), which is genuinely useful. However, it doesn't mention the default behavior (whether null returns all zones) or accepted code format beyond the three examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource ('List JAKIM prayer zone codes') with a specific description scope ('with area descriptions'). It distinguishes reasonably from siblings like get_prayer_times_today/month, as it's the only zone-list tool. Doesn't explicitly differentiate but purpose is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes the optional state filter, implying it's used for filtering/list operations. However, it provides no explicit guidance on when to use this vs alternatives, or when the state filter is needed vs. listing all zones. The state codes (SGR, JHR, WLY) context is helpful but usage boundaries are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.1.0- First observed
get_next_prayer - First observed
get_prayer_times_month - First observed
get_prayer_times_today - First observed
list_zones
TDQS
The four tools have mostly distinct purposes: daily times, monthly times, next prayer, and zone listing. get_prayer_times_today and get_next_prayer have slight overlap since both return today's prayer data, but their intents are clearly different (full schedule vs. nearest upcoming prayer). list_zones is a clear utility/discovery tool.
All tools follow a consistent get_verb + target noun pattern: get_prayer_times_today, get_prayer_times_month, get_next_prayer, and list_zones. The naming is uniform, snake_case, and predictable throughout.
Four tools is a reasonable, focused set for a prayer time domain. There could arguably be a get_zone_details or a between-days range tool, but the count is well-scoped and each tool serves a clear purpose without bloat.
The core domain is well covered: daily lookup, monthly schedule, next-prayer calculation, and zone discovery. A minor gap exists (no explicit date-range lookup or zone-specific settings/metadata), but agents can accomplish the primary workflows: find prayer times for today/month, determine next prayer, and discover zones.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
This MCP server provides seamless access to Malaysia's government open data, including datasets, w…
Islamic prayer times & calendar MCP (Aladhan API). Keyless.
Quran MCP server for translation, tafsir, mutashabihat, recitation playlists, and prayer times.
MCP server providing attendance data queries via the CloudTime API.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides access to Malaysia prayer time data through Claude Desktop, enabling users to retrieve prayer times for specific zones, list available prayer zones, and check current prayer time status.MIT
- AlicenseAqualityDmaintenanceA comprehensive MCP server for calculating Jewish prayer times (zmanim) using the python-zmanim library, supporting multiple halachic opinions and global locations.61MIT
- AlicenseAqualityAmaintenanceMCP server providing Malaysian/global prayer times (JAKIM + Aladhan fallback), nearest mosque/surau finder, and Islamic calendar events.41MIT
- AlicenseNot gradedqualityBmaintenanceRemote MCP server exposing Wasilah's Islamic reference data, enabling prayer-time, Qibla, Hijri-date, and Quran-audio queries via natural language.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/khrnchn/waktu-solat-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server