Pharos MCP Server
OfficialYou can read a wide range of Pharos blockchain data (EVM-compatible, native token PROS) via MCP tools, including:
Chain metadata (chain ID, client version, latest block, RPC endpoint)
Native PROS balances, address nonces, and gas prices
Block details (by tag or number)
Full transaction details and receipts by hash
Deployed contract bytecode and storage slots
Read-only contract calls (
eth_call) and gas estimationEvent logs within a block range (up to 5,000 blocks per call) The server optionally supports broadcasting signed raw transactions (
send_raw_transaction) when self-hosted and enabled, but the hosted endpoint is read-only.
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., "@Pharos MCP ServerWhat's the latest Pharos block?"
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.
Pharos MCP Server
An MCP server that brings Pharos chain data into MCP-compatible IDEs and agent workflows — Claude Desktop, Cursor, Windsurf, and custom agent runners.
Network: Pharos (EVM-compatible, 100% Ethereum-compatible)
Chain ID:
1672(0x688)RPC:
https://rpc.pharos.xyzNative token: PROS
Hosted endpoint:
https://mcp.pharos.xyz/mcp
Quick start — use the hosted server
No API key required. Add this to your MCP client configuration:
{
"mcpServers": {
"pharos": {
"type": "http",
"url": "https://mcp.pharos.xyz/mcp"
}
}
}The hosted endpoint speaks Streamable HTTP, so your client must support remote MCP
servers. Clients that only support stdio can bridge with
mcp-remote:
{
"mcpServers": {
"pharos": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.pharos.xyz/mcp"]
}
}
}Once connected, ask your agent things like "what's the latest Pharos block?" or "check the PROS balance of 0x…".
Rate limit: 120 requests per minute per IP. Exceeding it returns HTTP 429 with a
Retry-After header.
Related MCP server: Onesource MCP
Tools
13 read-only tools are available today.
Tool | Underlying JSON-RPC | Description | Parameters |
|
| Chain ID, client version, latest block | — |
|
| Latest block height | — |
|
| Native PROS balance of an address |
|
|
| Address nonce |
|
|
| Current gas price and priority fee | — |
|
| Block by tag or number |
|
|
| Transaction by hash |
|
|
| Transaction receipt |
|
|
| Contract bytecode |
|
|
| Read a contract storage slot |
|
|
| Read-only contract call |
|
|
| Estimate gas without sending |
|
|
| Event logs over a block range (max 1000 blocks per call) |
|
block accepts a named tag (latest, earliest, pending, safe, finalized), a
decimal number, or a 0x hex quantity.
Transaction broadcasting
A send_raw_transaction tool exists but is disabled on the hosted endpoint
(ENABLE_SEND_RAW_TRANSACTION=false), which is therefore read-only. Calling it there
returns an error.
The design is non-custodial: the server never receives or stores a private key. It only relays a transaction you already signed locally. If you self-host and enable it, put authentication in front of the endpoint first — an open, unauthenticated broadcast endpoint lets anyone push transactions through your node.
Self-hosting
Requires Node.js 20+.
npm install
npm run buildstdio transport
npm start{
"mcpServers": {
"pharos": {
"command": "node",
"args": ["/absolute/path/to/pharos-mcp/dist/src/index.js"],
"env": {
"PHAROS_RPC_URL": "https://rpc.pharos.xyz",
"PHAROS_CHAIN_ID": "1672",
"PHAROS_NATIVE_SYMBOL": "PROS"
}
}
}
}HTTP transport
MCP_TRANSPORT=http \
MCP_HOST=127.0.0.1 \
MCP_PORT=3001 \
MCP_AUTH_TOKEN="$(openssl rand -hex 32)" \
npm startMCP endpoint:
http://127.0.0.1:3001/mcp(POST only)Health check:
http://127.0.0.1:3001/health
With MCP_AUTH_TOKEN set, clients must send Authorization: Bearer <token>.
Scaling note. In HTTP mode each MCP session is held in the server process's memory. Running multiple instances behind a load balancer therefore needs real session affinity — and cookie-based stickiness is not enough, because MCP clients generally do not store or resend cookies. Requests that land on an instance which does not own the session fail with
Unknown MCP session. Run a single instance, or move session state into a shared store before scaling out.
Docker
docker build -t pharos-mcp-server .
docker run -p 3001:3001 -e MCP_TRANSPORT=http -e MCP_HOST=0.0.0.0 pharos-mcp-serverConfiguration
Variable | Default | Description |
|
| Upstream JSON-RPC endpoint |
|
| Expected chain ID |
|
| Native token symbol |
|
|
|
|
| Bind address (use |
|
| HTTP port |
| — | Bearer token; auth is off when unset |
|
| Enable transaction broadcasting |
|
| Per-IP request cap; |
|
| Set |
|
| Maximum concurrent MCP sessions; new sessions past the cap get |
|
| Idle sessions are evicted after this long |
Development
npm test # unit tests + a live chain ID check
npm run smoke # end-to-end MCP test over stdio against the real RPC
npm run smoke:http # end-to-end test against a running HTTP servernpm run smoke exercises the write path by signing a zero-value transaction with a freshly
generated empty wallet. The RPC rejects it for insufficient funds, so nothing is broadcast
on-chain.
Security notes
Never pass a private key or mnemonic to this server; it has no use for one.
send_raw_transactionis disabled by default.HTTP binds to
127.0.0.1by default.For a public deployment, terminate TLS in front of the server and keep rate limiting on.
admin_*,debug_*,personal_*andtxpool_*methods are not exposed.
License
MIT
Available Tools
14 toolsestimate_gasARead-only
Estimate gas for a transaction without sending it
| Name | Required | Description | Default |
|---|---|---|---|
| transaction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, covering the non-mutating nature of the tool. The description adds the key behavioral insight 'without sending it', but it does not disclose return format, potential failure modes, or network-dependent behavior. This is acceptable but not thorough.
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?
The description is a single nine-word sentence that is direct, front-loaded, and contains no unnecessary wording. It efficiently communicates the tool's core purpose.
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 no output schema, so the description should ideally clarify what the tool returns (e.g., the estimated gas amount and units), but it does not. Additionally, the transaction parameter is a nested object with nine fields and the description gives no guidance on required properties or defaults. The description is sufficient for selecting the tool but not for correctly invoking it without substantial prior domain knowledge.
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?
The description refers only to 'a transaction' and does not describe any of the fields in the nested transaction object. With schema description coverage at 0%, the agent gets no guidance on which properties are required or how they affect the estimate. The property names in the schema are somewhat self-explanatory, but the description fails to compensate for the lack of schema descriptions.
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 a specific action ('Estimate gas') and a specific resource ('for a transaction'). The qualifier 'without sending it' clearly distinguishes this from the sibling send_raw_transaction tool, and 'for a transaction' differentiates it from the network-level get_gas_price tool.
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 phrase 'without sending it' implies the tool should be used when a gas estimate is needed before an actual transaction is broadcast, and it excludes the send use case. However, it does not explicitly name alternatives like eth_call or get_gas_price, so it provides clear context but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eth_callCRead-onlyIdempotent
Execute a read-only EVM contract call
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | ||
| transaction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive nature. The description adds no additional behavioral context such as simulation semantics, revert behavior, or output format, simply restating the read-only aspect.
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?
The description is a single, efficient sentence with no wasted words, but the brevity compounds the lack of critical context.
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?
For a tool with a nested transaction object and no output schema, the description leaves out crucial information about parameters, return values, and usage context, making it incomplete for an agent to invoke correctly.
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%, and the description offers no parameter-specific details. An agent must infer that 'to' is the contract address and 'data' contains calldata without any explicit guidance.
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?
Clearly states the tool executes a read-only EVM contract call, distinguishing it from transaction submission tools like send_raw_transaction. However, it doesn't explicitly mention the return value or how it relates to the eth_call RPC method.
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 guidance on when to use this tool vs alternatives like estimate_gas or send_raw_transaction, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceARead-onlyIdempotent
Get the native PROS balance of an EVM address
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | Block tag or number; defaults to latest | |
| address | Yes | EVM address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no extra behavioral context such as return format (e.g., hex string) or behavior for nonexistent addresses. Since annotations carry the burden, the description is acceptable but adds minimal value.
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?
The description is a single sentence that is direct and front-loaded. It contains no filler or redundant content, earning a perfect score for conciseness.
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?
For a simple read-only balance query, the description plus schema and annotations are largely sufficient. However, no output schema is present, and the description does not mention the return value format, leaving a small gap. Despite this, the tool is straightforward, so it is nearly complete.
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 100% with both parameters documented: 'Block tag or number; defaults to latest' and 'EVM address'. The description itself does not elaborate on parameters, but the schema already provides the necessary semantics, so the baseline of 3 applies.
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 a specific action: 'Get the native PROS balance of an EVM address.' It identifies the resource (native PROS balance) and the subject (EVM address), distinguishing it from sibling tools like get_code or get_storage_at. The verb 'Get' is unambiguous.
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 implies the tool is for reading PROS balances but provides no explicit guidance on when to use it versus alternatives such as eth_call for token balances or get_transaction_count for nonce. There is no mention of exclusions or preferred use cases, so it only meets the 'implied usage' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blockARead-onlyIdempotent
Get a Pharos block by tag or number
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | ||
| includeTransactions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint true and destructiveHint false, covering the safety profile. The description adds no additional behavioral context such as tag semantics (e.g., 'latest', 'pending') or response structure, but no contradictions exist.
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?
The description is a single, front-loaded sentence that directly states the tool's function without extraneous detail.
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 and annotations cover risk, but the description omits details about valid tag values (e.g., 'latest', 'earliest') and the exact return structure. Given no output schema, this is a minor gap for a basic read operation.
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. It clarifies that the 'block' parameter accepts a tag or number, but the 'includeTransactions' parameter remains unexplained beyond its name and default value in the schema.
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 uses the specific verb 'Get' with a clear resource ('Pharos block') and scoping ('by tag or number'). It distinguishes from sibling get_block_number, which retrieves the current block number, making the purpose unmistakable.
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 guidance is provided on when to use this tool versus alternatives like get_block_number or get_transaction. There are no exclusions or contextual suggestions, leaving the agent to infer its use from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_block_numberARead-only
Get the latest Pharos block number
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds no additional behavioral context beyond stating the get action. It does not mention any caching, rate limits, or return format, but with annotations covering the read-only nature, the bar is met.
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?
The description is a single concise sentence that is front-loaded with the action and resource. It contains no fluff or redundant information.
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?
Given the tool's simplicity (no parameters, no output schema), the description is fully sufficient to convey its purpose. The intended output (a block number) is implicitly clear from the name and 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?
The tool has zero parameters, and the schema is complete with no properties. The description needs to explain nothing about parameters, so the baseline of 4 applies.
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 uses a specific verb 'Get' and identifies the exact resource: 'latest Pharos block number'. It clearly distinguishes from siblings like get_block (which likely returns block details) and get_chain_info (which returns chain metadata).
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?
There is no guidance on when to use this tool versus alternatives such as get_block or get_chain_info. The description simply states what it does, leaving the agent to infer appropriate usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chain_infoARead-onlyIdempotent
Get Pharos chain ID, client version, latest block and configured RPC endpoint
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, establishing the safety profile. The description adds value by enumerating the exact return fields, giving the agent a clear expectation of the output without needing an output schema. It does not discuss error conditions or rate limits, but for a simple getter this is sufficient.
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?
The description is a single sentence that front-loads the action verb and lists all four return items in a compact list. There is no filler, and every phrase adds information.
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 zero parameters, clear annotations, and a concise description listing all output fields, the tool is fully specified for the agent. The lack of an output schema is compensated by the description's enumeration of the returned data. Sibling tools suggest a read-only context, and this tool fits that pattern without needing additional caveats.
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?
The input schema has zero parameters, so the baseline score is 4. The description does not need to explain parameters, and it correctly lists the data items returned rather than any input details.
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 uses the specific verb 'Get' and identifies the resource as Pharos chain info, listing four concrete data items (chain ID, client version, latest block, configured RPC endpoint). This clearly distinguishes it from sibling tools like get_block_number or get_transaction, which target different resources.
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 does not explicitly state when to use this tool over siblings such as get_block_number or eth_call. However, the purpose is self-explanatory and implies usage when chain-level metadata is needed, so it provides minimal contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_codeBRead-onlyIdempotent
Get contract bytecode at an address
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | ||
| address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the annotations (readOnlyHint, idempotentHint, non-destructive) but adds no behavioral context beyond that. It does not mention edge cases like addresses without code or the format of returned data. Since annotations are present, the bar is lower, but the description still adds minimal value.
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?
The description is a single concise sentence that front-loads the core action. It is exactly as long as needed and contains no filler.
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 no output schema and incomplete parameter documentation, the description is insufficient for an agent to fully understand the tool's behavior. The block parameter is completely unexplained, and there is no indication of return values or edge cases. The purpose is clear, but the tool's full usage context is not.
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?
The input schema has two parameters (address and block) with no descriptions. The description mentions 'at an address' but says nothing about the block parameter, leaving its purpose and usage ambiguous. Schema description coverage is 0%, and the description does not compensate.
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 tool gets contract bytecode at a given address. The verb 'get' specifies the action, and 'contract bytecode' distinguishes it from sibling tools like get_balance or get_storage_at.
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 guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or comparison with sibling tools. The description only states what it does, not when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gas_priceARead-only
Get current Pharos gas price and priority fee
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds that it returns the 'current' price and includes 'priority fee', which is useful context. However, it does not disclose additional behavioral traits such as caching, latency, or response format, which is acceptable given the annotations but not exceptional.
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?
The description is a single, concise sentence that front-loads the verb and resource. It contains no filler or redundant information, and every word earns its place.
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?
For a zero-parameter read-only tool with no output schema, the description is complete. It clearly states what data the tool returns, and the sibling tools provide enough context for differentiation. No additional explanation of return values or behavior is necessary.
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?
The tool has zero parameters, so the schema imposes no burden. The description adds semantic meaning by specifying what is retrieved (gas price and priority fee), which goes beyond the empty parameter list. Per the rubric, a baseline of 4 is appropriate for 0 parameters.
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 'Get current Pharos gas price and priority fee' uses a specific verb ('Get') and clearly identifies the resource (gas price and priority fee). It is distinct from sibling tools like get_block or get_balance, and the scope ('current') adds precision.
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 does not explicitly state when to use this tool versus alternatives like estimate_gas. The usage is implied by the name and description, but no exclusions or alternative suggestions are provided. The context signal of zero parameters makes it straightforward, but guidance is still implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_logsARead-onlyIdempotent
Get EVM logs with bounded block range supplied by the caller
| Name | Required | Description | Default |
|---|---|---|---|
| topics | No | ||
| address | No | ||
| toBlock | No | ||
| fromBlock | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the agent knows this is a safe read operation. The description adds the behavioral requirement that the caller must supply a bounded block range, which is useful, but it does not mention return format or potential size/pagination issues. No contradictions with annotations.
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?
The description is a single sentence that fronts the action and resource, with no redundant words. Every word earns its place.
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 four optional parameters, no output schema, and no parameter descriptions in the schema, the description is too skeletal to fully guide invocation. It does not state what the tool returns (e.g., an array of log objects), nor does it clarify whether fromBlock/toBlock are effectively required despite the schema marking them optional. The annotations provide safety context, but the description lacks operational completeness.
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?
The schema has 0% description coverage, and the description does not explain any of the four parameters. It only hints at block range via 'bounded block range,' leaving topics and address semantics entirely to the schema property names, which may be ambiguous for an AI agent. The description fails to compensate for the schema's lack of parameter descriptions.
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 uses the specific verb 'Get' with the resource 'EVM logs', and adds the qualifier 'with bounded block range supplied by the caller.' This clearly distinguishes it from sibling tools like get_transaction_receipt, which retrieves logs for a specific transaction, and get_block, which retrieves block data.
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 implies the tool is for querying logs over a caller-specified block range, but it provides no explicit guidance on when to use it over alternatives like get_transaction_receipt or eth_call, and does not mention any exclusions. The context is clear but lacks alternative selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storage_atCRead-onlyIdempotent
Read a contract storage slot
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | ||
| address | Yes | ||
| position | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. However, the description adds no additional behavioral context beyond what annotations provide—such as return format, encoding of 'position', or behavior with invalid inputs. It essentially restates the read-only nature already captured by the annotations.
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?
The description is a single, well-structured sentence that is front-loaded with the core purpose. It contains no fluff or redundant details. While extremely brief, it conveys the essential action and object efficiently, fitting the conciseness criterion perfectly.
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?
For a tool of this complexity, the description lacks critical context: it does not mention the block parameter, the expected return value (e.g., raw storage data), or how 'position' is interpreted. There is no cross-referencing to related tools or caveats. The rich annotations mitigate some concerns, but the description alone is insufficient for an agent to confidently invoke the tool in varied scenarios.
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. It does not explain any parameter: 'address', 'position', or 'block' are left undocumented. The meaning of 'position' (likely a storage slot key, often hex-encoded) is not clarified, and no hints about allowed formats or types are given. This is a complete failure to aid parameter understanding.
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 'Read a contract storage slot' clearly states the action (read) and the specific resource (contract storage slot), which distinguishes it from sibling tools like get_balance (reads balance) and get_code (reads code). The verb-resource pairing is specific and unambiguous.
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 provides no guidance on when to use this tool versus alternatives, such as eth_call or get_balance. There is no mention of context, prerequisites, or exclusions. The single sentence gives the purpose but leaves usage entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionBRead-onlyIdempotent
Get a transaction by hash
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds no additional behavioral context, such as return formats, error conditions, or quirks like returning null for unknown hashes.
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?
The description is a single, focused sentence with no filler. It is appropriately sized for the tool's simplicity.
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?
Given no output schema and the presence of get_transaction_receipt, the description is incomplete. It does not explain what is returned, how it differs from related tools, or how it handles missing or invalid hashes.
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?
The schema has one 'hash' string parameter with no description (0% coverage). The description merely restates 'by hash' without explaining what the hash is (e.g., hex string, 0x-prefixed) or any constraints like required format.
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 'Get a transaction by hash' uses a specific verb and resource, clearly indicating it retrieves transaction data by hash. It implicitly distinguishes from siblings like get_transaction_receipt because it targets a transaction resource rather than a receipt.
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 usage guidance is provided. The description does not mention when to use this tool instead of alternatives like get_transaction_receipt, nor does it clarify scenarios such as pending vs confirmed transactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_countBRead-only
Get an address transaction count (nonce)
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | Usually latest or pending | |
| address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the semantic clarification that the count is the nonce, but it does not disclose additional behavioral traits like changing values across calls or the effect of the optional block parameter.
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?
The description is a single, front-loaded sentence with no redundant words. It earns its place efficiently, fully fitting the tool's simple nature.
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?
For a simple read-only tool with two parameters and no output schema, the description is mostly complete. It implies a numeric return value (nonce) and the annotations cover safety. The only notable gap is not explicitly explaining the optional block parameter, though the schema partially covers that.
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 50%: the block parameter has a description ('Usually latest or pending'), but address lacks one. The description implies address is the target but adds no detail about the block parameter or the default behavior. It partially compensates but relies on the schema for block context.
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 tool 'Get an address transaction count (nonce)' with a specific verb and resource. It defines the operation precisely and adds the nonce clarification, but it does not explicitly differentiate from sibling tools like get_transaction or get_balance.
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 usage context is provided. The description does not mention when to use this tool versus alternatives, nor any prerequisites or exclusions. It is a bare definition with no guidance on selecting this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transaction_receiptARead-onlyIdempotent
Get a transaction receipt by hash
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as readOnly, idempotent, and non-destructive. The description adds no additional behavioral context (e.g., return format, error conditions, or network implications). Since the annotations cover the safety profile, the minimal description does not create a conflict but also offers no extra transparency.
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?
The description is a single, front-loaded sentence with no redundant words. It states exactly what the tool does without unnecessary explanation.
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, and the annotations plus schema provide basic context. The description does not explain what a transaction receipt contains, but no output schema exists and the concept is well-known in blockchain contexts. Given the tool's simplicity and the presence of sibling tools that contrast with it, the description is reasonably complete.
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?
With 0% schema description coverage, the description compensates by indicating that the 'hash' parameter is the transaction hash. This clarifies the parameter's purpose, though it does not specify details like hex format or length. Given there is only one parameter, the semantic role is sufficiently conveyed.
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 operation ('Get a transaction receipt') and the input key ('by hash'), distinguishing it from sibling tools like get_transaction, which retrieves transaction details rather than receipts. The verb and resource are specific and unambiguous.
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 gives no guidance on when to use this tool versus alternatives, such as get_transaction or get_logs. It does not mention exclusions, prerequisites, or comparison with siblings, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_raw_transactionADestructive
Broadcast an already-signed raw EVM transaction. This server never receives a private key.
| Name | Required | Description | Default |
|---|---|---|---|
| rawTransaction | Yes | 0x-prefixed signed transaction bytes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly=false, destructiveHint=true), the description discloses that the server never receives a private key, a meaningful security behavior not present in annotations. The phrase 'already-signed' also clarifies that the tool does not sign transactions, adding behavioral context beyond the structured metadata.
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?
The description is two sentences long, with the primary action front-loaded in the first sentence. The second sentence adds a valuable security guarantee without any unnecessary words. Every part earns its place.
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?
For a single-parameter tool with strong annotations, the description is mostly sufficient. However, there is no output schema and the description does not mention what the tool returns (e.g., transaction hash) or potential error conditions, leaving a small gap in completeness for an agent that might need to confirm the result.
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?
The schema already fully describes the single parameter 'rawTransaction' as '0x-prefixed signed transaction bytes' (100% coverage). The description's mention of 'already-signed' adds no new meaning beyond what the schema provides, so the baseline of 3 is appropriate.
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 action 'Broadcast' and the resource 'raw EVM transaction', distinguishing it from the sibling read-only tools. The added note about never receiving a private key reinforces the tool's unique role as a broadcast-only operation, making its purpose unambiguous.
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 implies a key prerequisite: the transaction must already be signed, since it says 'already-signed'. It also signals that the server is not a signer by noting it never receives a private key. While it doesn't explicitly compare to alternatives, the sibling tools are all read-only, so this is clearly the only broadcast tool; no explicit exclusion is necessary.
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.
14 tool updates
v0.4.0- First observed
estimate_gas - First observed
eth_call - First observed
get_balance - First observed
get_block - First observed
get_block_number - First observed
get_chain_info - First observed
get_code - First observed
get_gas_price - First observed
get_logs - First observed
get_storage_at - First observed
get_transaction - First observed
get_transaction_count - First observed
get_transaction_receipt - First observed
send_raw_transaction
TDQS
Every tool targets a distinct resource or action: code, storage, call, gas, logs, transaction, receipt, balance, nonce, gas price, block, chain info. No two tools have overlapping purposes; even similar ones like get_transaction and get_transaction_receipt are clearly separated by what they return.
All tools follow a snake_case pattern, predominantly verb_get_* for reads and send_raw_transaction for the write operation. eth_call and estimate_gas are also snake_case and align with common EVM naming, preserving overall consistency.
14 tools is well within the ideal 3-15 range for an EVM blockchain server. Each tool corresponds to a standard JSON-RPC method, and none are redundant or superfluous given the server's purpose.
The tool set covers the full spectrum of EVM node interactions: chain info, blocks, transactions, receipts, balances, storage, code, calls, gas estimation, logs, nonce, gas price, and raw transaction broadcast. This is a complete surface for typical dApp or chain interaction needs.
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
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
Free read-only crypto whale-tracking & market-data MCP tools across 14 chains. No auth.
Read-only DERO blockchain MCP: 33 tools (12 composites) incl. TELA discovery + bundled docs.
MEOK ABCI Bridge MCP — read-only Tendermint / Cosmos blockchain query for agents. Built-in registry
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceBridges Ethereum JSON-RPC queries from Geth nodes to the Model Context Protocol ecosystem, exposing blockchain operations as MCP tools. Enables AI models and applications to securely interact with Ethereum data including blocks, transactions, balances, and advanced debug functions through schema-validated access.873MIT
- AlicenseAqualityBmaintenanceMCP server with 43 tools for blockchain data — token lookups, wallet balances, live chain queries across 10+ networks, and full API documentation search.27187Apache 2.0
- AlicenseAqualityFmaintenanceProvides MCP tools to query Etherscan for Ethereum blockchain data—ETH balances, ERC-20 tokens, transactions, contract ABIs, and gas prices—without requiring an API key.820MIT
- AlicenseAqualityBmaintenanceA read-only MCP server that queries multichain EVM on-chain data through Blockscout REST API, providing tools for address info, transactions, logs, and more.1627MIT
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/PharosNetwork/pharos-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server