# formulas/add-rpc-method.toml — Add a new JSON-RPC method to a server name = "add-rpc-method" description = "Add JSON-RPC method {{method_name}} to the server" version = 1 [vars.method_name] description = "Full method name (e.g. eth_getBalance, harb_listPositions)" required = true [vars.params_spec] description = "Comma-separated parameter names and types (e.g. 'address: Address, blockTag: BlockTag')" required = false default = "" [vars.return_type] description = "Return type description (e.g. 'U256 balance', 'Vec')" required = false default = "result" [[steps]] id = "read-existing" title = "Read existing RPC methods for patterns" description = """ Find and read 2-3 existing RPC method implementations in this codebase. Identify: - Where method handlers are defined (trait, module, file) - How methods are registered with the router/server - How params are deserialized and validated - How errors are returned (error type, codes) - How tests are structured for RPC methods Note the file paths so subsequent steps can follow the same patterns. """ [[steps]] id = "implement-handler" title = "Implement {{method_name}} handler" description = """ Create the handler for {{method_name}} following the patterns found above. Method signature should accept: {{params_spec}} Return type: {{return_type}} Requirements: - Validate input parameters; return appropriate JSON-RPC error codes for invalid input - Implement the core logic - Add inline documentation describing the method's purpose and params - Follow the naming conventions and error-handling style of existing methods """ needs = ["read-existing"] [[steps]] id = "register-method" title = "Register {{method_name}} with the RPC router" description = """ Add {{method_name}} to the server's method registry / router, following the same registration pattern used by existing methods. The namespace is the prefix of {{method_name}} before the underscore (e.g. "eth" for "eth_getBalance"). Verify the server's namespace filter or allowlist includes this namespace in the default configuration. """ needs = ["implement-handler"] [[steps]] id = "write-tests" title = "Write tests for {{method_name}}" description = """ Add at least two tests for {{method_name}}: 1. Happy path — valid input, expected {{return_type}} returned 2. Error path — invalid or missing params, correct JSON-RPC error returned Follow the test patterns found in read-existing. Use any existing test fixtures or mock server helpers. """ needs = ["register-method"] [[steps]] id = "run-tests" title = "Run tests and verify" description = """ Run the full test suite (e.g. cargo test, npm test, forge test). Confirm: - New tests pass - No existing tests were broken Fix any compilation errors or assertion failures before finishing. """ needs = ["write-tests"]