UNPKG

@mcp-shark/mcp-shark

Version:

Aggregate multiple Model Context Protocol (MCP) servers into a single unified interface with a powerful monitoring UI. Prov deep visibility into every request and response.

90 lines (88 loc) 2.45 kB
import { colors, fonts } from '../../../theme'; export default function ResourceCallPanel({ resource, resourceResult, onReadResource, loading }) { return ( <div style={{ flex: 1, border: `1px solid ${colors.borderLight}`, borderRadius: '8px', overflow: 'hidden', display: 'flex', flexDirection: 'column', }} > <div style={{ padding: '12px', background: colors.bgSecondary, borderBottom: `1px solid ${colors.borderLight}`, fontWeight: '500', fontSize: '14px', color: colors.textPrimary, }} > Read Resource: {resource.uri} </div> <div style={{ flex: 1, overflow: 'auto', padding: '16px', display: 'flex', flexDirection: 'column', gap: '12px', }} > <button onClick={onReadResource} disabled={loading} style={{ padding: '10px 20px', background: colors.buttonPrimary, color: colors.textInverse, border: 'none', borderRadius: '6px', cursor: loading ? 'not-allowed' : 'pointer', fontFamily: fonts.body, fontSize: '13px', fontWeight: '500', opacity: loading ? 0.6 : 1, }} > {loading ? 'Reading...' : 'Read Resource'} </button> {resourceResult && ( <div> <label style={{ display: 'block', fontSize: '12px', fontWeight: '500', color: colors.textSecondary, marginBottom: '6px', }} > Result </label> <pre style={{ padding: '12px', background: colors.bgSecondary, border: `1px solid ${colors.borderLight}`, borderRadius: '6px', fontSize: '12px', fontFamily: fonts.mono, color: resourceResult.error ? colors.error : colors.textPrimary, overflow: 'auto', maxHeight: '400px', margin: 0, }} > {JSON.stringify(resourceResult, null, 2)} </pre> </div> )} </div> </div> ); }