pub struct GhidraMcpServer {
pub state: Arc<ServerState>,
tool_router: ToolRouter<Self>,
}Expand description
The MCP server: one attached-worker state shared with the tool methods, plus the rmcp-generated tool router (spec §5).
Fields§
§state: Arc<ServerState>§tool_router: ToolRouter<Self>Implementations§
Source§impl GhidraMcpServer
impl GhidraMcpServer
pub fn new(state: Arc<ServerState>) -> Self
Sourceasync fn err_canon(&self, e: ErrorEnvelope) -> CallToolResult
async fn err_canon(&self, e: ErrorEnvelope) -> CallToolResult
Shared Err-path handling for tools that can throw AMBIGUOUS_SYMBOL with address-bearing
candidates (get_xrefs, get_disassembly): canonicalize details.candidates[].address using the
live canonicalizer before returning the error result. Other codes pass through unchanged.
Source§impl GhidraMcpServer
impl GhidraMcpServer
Sourcepub fn list_project_programs_tool_attr() -> Tool
pub fn list_project_programs_tool_attr() -> Tool
Generated tool metadata function for list_project_programs
fn list_project_programs( &self, Parameters: Parameters<ListProgramsArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn attach_program_tool_attr() -> Tool
pub fn attach_program_tool_attr() -> Tool
Generated tool metadata function for attach_program
fn attach_program( &self, Parameters: Parameters<AttachArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn inspect_function_tool_attr() -> Tool
pub fn inspect_function_tool_attr() -> Tool
Generated tool metadata function for inspect_function
fn inspect_function( &self, Parameters: Parameters<InspectArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn find_functions_tool_attr() -> Tool
pub fn find_functions_tool_attr() -> Tool
Generated tool metadata function for find_functions
fn find_functions( &self, Parameters: Parameters<FindFunctionsArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn resolve_symbol_tool_attr() -> Tool
pub fn resolve_symbol_tool_attr() -> Tool
Generated tool metadata function for resolve_symbol
fn resolve_symbol( &self, Parameters: Parameters<ResolveSymbolArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn list_symbols_tool_attr() -> Tool
pub fn list_symbols_tool_attr() -> Tool
Generated tool metadata function for list_symbols
fn list_symbols( &self, Parameters: Parameters<ListSymbolsArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn list_strings_tool_attr() -> Tool
pub fn list_strings_tool_attr() -> Tool
Generated tool metadata function for list_strings
fn list_strings( &self, Parameters: Parameters<ListStringsArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn get_xrefs_tool_attr() -> Tool
pub fn get_xrefs_tool_attr() -> Tool
Generated tool metadata function for get_xrefs
fn get_xrefs( &self, Parameters: Parameters<GetXrefsArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn get_disassembly_tool_attr() -> Tool
pub fn get_disassembly_tool_attr() -> Tool
Generated tool metadata function for get_disassembly
fn get_disassembly( &self, Parameters: Parameters<GetDisassemblyArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn read_bytes_tool_attr() -> Tool
pub fn read_bytes_tool_attr() -> Tool
Generated tool metadata function for read_bytes
fn read_bytes( &self, Parameters: Parameters<ReadBytesArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn get_datatype_tool_attr() -> Tool
pub fn get_datatype_tool_attr() -> Tool
Generated tool metadata function for get_datatype
fn get_datatype( &self, Parameters: Parameters<GetDatatypeArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn list_segments_tool_attr() -> Tool
pub fn list_segments_tool_attr() -> Tool
Generated tool metadata function for list_segments
fn list_segments( &self, Parameters: Parameters<ListSegmentsArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn list_data_items_tool_attr() -> Tool
pub fn list_data_items_tool_attr() -> Tool
Generated tool metadata function for list_data_items
fn list_data_items( &self, Parameters: Parameters<ListDataItemsArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn describe_address_tool_attr() -> Tool
pub fn describe_address_tool_attr() -> Tool
Generated tool metadata function for describe_address
fn describe_address( &self, Parameters: Parameters<DescribeAddressArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn rename_tool_attr() -> Tool
pub fn rename_tool_attr() -> Tool
Generated tool metadata function for rename
fn rename( &self, Parameters: Parameters<RenameArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn comment_tool_attr() -> Tool
pub fn comment_tool_attr() -> Tool
Generated tool metadata function for comment
fn comment( &self, Parameters: Parameters<CommentArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn set_datatype_tool_attr() -> Tool
pub fn set_datatype_tool_attr() -> Tool
Generated tool metadata function for set_datatype
fn set_datatype( &self, Parameters: Parameters<SetDatatypeArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn set_prototype_tool_attr() -> Tool
pub fn set_prototype_tool_attr() -> Tool
Generated tool metadata function for set_prototype
fn set_prototype( &self, Parameters: Parameters<SetPrototypeArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
Sourcepub fn set_local_tool_attr() -> Tool
pub fn set_local_tool_attr() -> Tool
Generated tool metadata function for set_local
fn set_local( &self, Parameters: Parameters<SetLocalArgs>, ) -> Pin<Box<dyn Future<Output = Result<CallToolResult, ErrorData>> + Send + '_>>
fn tool_router() -> ToolRouter<Self>
Trait Implementations§
Source§impl ServerHandler for GhidraMcpServer
impl ServerHandler for GhidraMcpServer
fn get_info(&self) -> ServerConfig
Source§async fn call_tool(
&self,
request: CallToolRequestParams,
context: RequestContext<RoleServer>,
) -> Result<CallToolResponse, ErrorData>
async fn call_tool( &self, request: CallToolRequestParams, context: RequestContext<RoleServer>, ) -> Result<CallToolResponse, ErrorData>
tools/call request from a client. Read moreasync fn list_tools( &self, _request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> Result<ListToolsResult, ErrorData>
fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, ErrorData>> + MaybeSendFuture
§fn negotiate_initialize(
&self,
request: &InitializeRequestParams,
) -> Result<InitializeResult, ErrorData>
fn negotiate_initialize( &self, request: &InitializeRequestParams, ) -> Result<InitializeResult, ErrorData>
initialize response for request, negotiating the
protocol version against [Self::supported_protocol_versions]. Read more§fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
§fn discover(
&self,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<DiscoverResult, ErrorData>> + MaybeSendFuture
fn discover( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<DiscoverResult, ErrorData>> + MaybeSendFuture
fn complete( &self, request: CompleteRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CompleteResult, ErrorData>> + MaybeSendFuture
fn set_level( &self, request: SetLevelRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn get_prompt( &self, request: GetPromptRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetPromptResponse, ErrorData>> + MaybeSendFuture
fn list_prompts( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListPromptsResult, ErrorData>> + MaybeSendFuture
fn list_resources( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourcesResult, ErrorData>> + MaybeSendFuture
fn list_resource_templates( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourceTemplatesResult, ErrorData>> + MaybeSendFuture
fn read_resource( &self, request: ReadResourceRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ReadResourceResponse, ErrorData>> + MaybeSendFuture
§fn accepted_subscription_filter(
&self,
requested: &SubscriptionFilter,
) -> Option<SubscriptionFilter>
fn accepted_subscription_filter( &self, requested: &SubscriptionFilter, ) -> Option<SubscriptionFilter>
§fn listen(
&self,
context: SubscriptionContext,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn listen( &self, context: SubscriptionContext, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
§fn subscribe(
&self,
request: SubscribeRequestParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn subscribe( &self, request: SubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
resources/subscribe is legacy-only; implement accepted_subscription_filter and listen for protocol version 2026-07-28
§fn unsubscribe(
&self,
request: UnsubscribeRequestParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn unsubscribe( &self, request: UnsubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
resources/unsubscribe is legacy-only; subscriptions/listen is cancelled through its request lifecycle
fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CustomResult, ErrorData>> + MaybeSendFuture
fn on_cancelled( &self, notification: CancelledNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_progress( &self, notification: ProgressNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_initialized( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_roots_list_changed( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
§fn get_task(
&self,
request: GetTaskParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<GetTaskResult, ErrorData>> + MaybeSendFuture
fn get_task( &self, request: GetTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskResult, ErrorData>> + MaybeSendFuture
tasks/get: return the current [DetailedTask] state.§fn update_task(
&self,
request: UpdateTaskParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn update_task( &self, request: UpdateTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
tasks/update: accept responses to outstanding in-task
input requests. Returns an empty acknowledgement on success.§fn cancel_task(
&self,
request: CancelTaskParams,
context: RequestContext<RoleServer>,
) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn cancel_task( &self, request: CancelTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
tasks/cancel: cooperative cancellation. Returns an empty
acknowledgement; the task’s observable status may lag.Auto Trait Implementations§
impl !RefUnwindSafe for GhidraMcpServer
impl !UnwindSafe for GhidraMcpServer
impl Freeze for GhidraMcpServer
impl Send for GhidraMcpServer
impl Sync for GhidraMcpServer
impl Unpin for GhidraMcpServer
impl UnsafeUnpin for GhidraMcpServer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
fn handle_request( &self, request: <R as ServiceRole>::PeerReq, context: RequestContext<R>, ) -> Pin<Box<dyn Future<Output = Result<<R as ServiceRole>::Resp, ErrorData>> + Send + '_>>
fn handle_notification( &self, notification: <R as ServiceRole>::PeerNot, context: NotificationContext<R>, ) -> Pin<Box<dyn Future<Output = Result<(), ErrorData>> + Send + '_>>
fn get_info(&self) -> <R as ServiceRole>::Info
§fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
Service::supported_protocol_versions].§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§impl<H> Service<RoleServer> for Hwhere
H: ServerHandler,
impl<H> Service<RoleServer> for Hwhere
H: ServerHandler,
async fn handle_request( &self, request: <RoleServer as ServiceRole>::PeerReq, context: RequestContext<RoleServer>, ) -> Result<<RoleServer as ServiceRole>::Resp, ErrorData>
async fn handle_notification( &self, notification: <RoleServer as ServiceRole>::PeerNot, context: NotificationContext<RoleServer>, ) -> Result<(), ErrorData>
fn get_info(&self) -> <RoleServer as ServiceRole>::Info
§fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
fn supported_protocol_versions(&self) -> Cow<'static, [ProtocolVersion]>
initialize
negotiation may agree to. Read more