fixparser-plugin-mcp 9.1.7-544294dd → 9.1.7-57d70bb1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,49 @@
1
+ import type { IFIXParser, Logger } from 'fixparser';
2
+ import type { IPlugin } from 'fixparser-common';
3
+ import type { VerifiedOrder } from './schemas';
4
+ import type { MarketDataPrices, PendingRequests } from './utils/messageHandler';
5
+ export declare abstract class MCPBase implements IPlugin<IFIXParser> {
6
+ /**
7
+ * Optional logger instance for diagnostics and output.
8
+ * @protected
9
+ */
10
+ protected logger: Logger | undefined;
11
+ /**
12
+ * FIXParser instance, set during plugin register().
13
+ * @protected
14
+ */
15
+ protected parser: IFIXParser | undefined;
16
+ /**
17
+ * Called when server is setup and listening.
18
+ * @protected
19
+ */
20
+ protected onReady: (() => void) | undefined;
21
+ /**
22
+ * Map to store verified orders before execution
23
+ * @protected
24
+ */
25
+ protected verifiedOrders: Map<string, VerifiedOrder>;
26
+ /**
27
+ * Map to store pending market data requests
28
+ * @protected
29
+ */
30
+ protected pendingRequests: PendingRequests;
31
+ /**
32
+ * Map to store market data prices
33
+ * @protected
34
+ */
35
+ protected marketDataPrices: MarketDataPrices;
36
+ /**
37
+ * Maximum number of price history entries to keep per symbol
38
+ * @protected
39
+ */
40
+ protected readonly MAX_PRICE_HISTORY = 100000;
41
+ constructor({
42
+ logger,
43
+ onReady,
44
+ }: {
45
+ logger?: Logger;
46
+ onReady?: () => void;
47
+ });
48
+ abstract register(parser: IFIXParser): Promise<void>;
49
+ }
@@ -1,13 +1,39 @@
1
- import { type IFIXParser } from 'fixparser';
2
- import type { IPlugin } from 'fixparser-common';
1
+ import type { IFIXParser, Message } from 'fixparser';
2
+ import { MCPBase } from './MCPBase';
3
3
  import type { PluginOptions } from './PluginOptions';
4
- export declare class MCPLocal implements IPlugin<IFIXParser> {
5
- private logger;
6
- private parser;
4
+ import type { VerifiedOrder } from './schemas';
5
+ export declare class MCPLocal extends MCPBase {
6
+ /**
7
+ * Map to store verified orders before execution
8
+ * @private
9
+ */
10
+ protected verifiedOrders: Map<string, VerifiedOrder>;
11
+ /**
12
+ * Map to store pending requests and their callbacks
13
+ * @private
14
+ */
15
+ protected pendingRequests: Map<string, (data: Message) => void>;
16
+ /**
17
+ * Map to store market data prices for each symbol
18
+ * @private
19
+ */
20
+ protected marketDataPrices: Map<
21
+ string,
22
+ Array<{
23
+ timestamp: number;
24
+ bid: number;
25
+ offer: number;
26
+ spread: number;
27
+ volume: number;
28
+ }>
29
+ >;
30
+ /**
31
+ * Maximum number of price points to store per symbol
32
+ * @private
33
+ */
34
+ protected readonly MAX_PRICE_HISTORY = 100000;
7
35
  private server;
8
36
  private transport;
9
- private onReady;
10
- private pendingRequests;
11
37
  constructor({ logger, onReady }: PluginOptions);
12
38
  register(parser: IFIXParser): Promise<void>;
13
39
  private addWorkflows;
@@ -1,60 +1,66 @@
1
- import { type IFIXParser, type Logger } from 'fixparser';
2
- import type { IPlugin } from 'fixparser-common';
3
- export type PluginOptions = {
1
+ import type { IFIXParser, Message } from 'fixparser';
2
+ import { MCPBase } from './MCPBase';
3
+ import type { PluginOptions } from './PluginOptions';
4
+ import type { VerifiedOrder } from './schemas';
5
+ export type RemotePluginOptions = PluginOptions & {
4
6
  port: number;
5
- logger?: Logger;
6
- onReady: () => void;
7
7
  };
8
- export declare class MCPRemote implements IPlugin<IFIXParser> {
8
+ export declare class MCPRemote extends MCPBase {
9
9
  /**
10
10
  * Port number the server will listen on.
11
11
  * @private
12
12
  */
13
13
  private port;
14
14
  /**
15
- * Optional logger instance for diagnostics and output.
15
+ * Node.js HTTP server instance created internally.
16
16
  * @private
17
17
  */
18
- private logger;
18
+ private httpServer;
19
19
  /**
20
- * FIXParser instance, set during plugin register().
20
+ * MCP server instance handling MCP protocol logic.
21
21
  * @private
22
22
  */
23
- private parser;
23
+ private mcpServer;
24
24
  /**
25
- * Node.js HTTP server instance created internally.
25
+ * Optional name of the plugin/server instance.
26
26
  * @private
27
27
  */
28
- private server;
28
+ private serverName;
29
29
  /**
30
- * MCP server instance handling MCP protocol logic.
30
+ * Optional version string of the plugin/server.
31
31
  * @private
32
32
  */
33
- private mcpServer;
33
+ private serverVersion;
34
34
  /**
35
- * Optional name of the plugin/server instance.
35
+ * Map to store verified orders before execution
36
36
  * @private
37
37
  */
38
- private name;
38
+ protected verifiedOrders: Map<string, VerifiedOrder>;
39
39
  /**
40
- * Optional version string of the plugin/server.
40
+ * Map to store pending requests and their callbacks
41
41
  * @private
42
42
  */
43
- private version;
43
+ protected pendingRequests: Map<string, (data: Message) => void>;
44
44
  /**
45
- * Called when server is setup and listening.
45
+ * Map to store market data prices for each symbol
46
46
  * @private
47
47
  */
48
- private onReady;
48
+ protected marketDataPrices: Map<
49
+ string,
50
+ Array<{
51
+ timestamp: number;
52
+ bid: number;
53
+ offer: number;
54
+ spread: number;
55
+ volume: number;
56
+ }>
57
+ >;
49
58
  /**
50
- * A map of pending market data requests, keyed by MDReqID.
51
- * Each entry contains a resolver function that is called when the corresponding
52
- * FIX Message is received.
59
+ * Maximum number of price points to store per symbol
53
60
  * @private
54
- * @type {Map<string, (data: Message) => void>}
55
61
  */
56
- private pendingRequests;
57
- constructor({ port, logger, onReady }: PluginOptions);
62
+ protected readonly MAX_PRICE_HISTORY = 100000;
63
+ constructor({ port, logger, onReady }: RemotePluginOptions);
58
64
  register(parser: IFIXParser): Promise<void>;
59
- private addWorkflows;
65
+ private setupTools;
60
66
  }
@@ -0,0 +1,15 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ export interface VerifiedOrder {
3
+ clOrdID: string;
4
+ handlInst: string;
5
+ quantity: number;
6
+ price: number;
7
+ ordType: string;
8
+ side: string;
9
+ symbol: string;
10
+ timeInForce: string;
11
+ }
12
+ export type ToolHandler = (args: any) => Promise<CallToolResult>;
13
+ export interface ToolHandlers {
14
+ [key: string]: ToolHandler;
15
+ }
@@ -0,0 +1,168 @@
1
+ export declare const toolSchemas: {
2
+ parse: {
3
+ description: string;
4
+ schema: {
5
+ type: string;
6
+ properties: {
7
+ fixString: {
8
+ type: string;
9
+ };
10
+ };
11
+ required: string[];
12
+ };
13
+ };
14
+ parseToJSON: {
15
+ description: string;
16
+ schema: {
17
+ type: string;
18
+ properties: {
19
+ fixString: {
20
+ type: string;
21
+ };
22
+ };
23
+ required: string[];
24
+ };
25
+ };
26
+ verifyOrder: {
27
+ description: string;
28
+ schema: {
29
+ type: string;
30
+ properties: {
31
+ clOrdID: {
32
+ type: string;
33
+ };
34
+ handlInst: {
35
+ type: string;
36
+ enum: string[];
37
+ description: string;
38
+ };
39
+ quantity: {
40
+ type: string;
41
+ };
42
+ price: {
43
+ type: string;
44
+ };
45
+ ordType: {
46
+ type: string;
47
+ enum: string[];
48
+ description: string;
49
+ };
50
+ side: {
51
+ type: string;
52
+ enum: string[];
53
+ description: string;
54
+ };
55
+ symbol: {
56
+ type: string;
57
+ };
58
+ timeInForce: {
59
+ type: string;
60
+ enum: string[];
61
+ description: string;
62
+ };
63
+ };
64
+ required: string[];
65
+ };
66
+ };
67
+ executeOrder: {
68
+ description: string;
69
+ schema: {
70
+ type: string;
71
+ properties: {
72
+ clOrdID: {
73
+ type: string;
74
+ };
75
+ handlInst: {
76
+ type: string;
77
+ enum: string[];
78
+ description: string;
79
+ };
80
+ quantity: {
81
+ type: string;
82
+ };
83
+ price: {
84
+ type: string;
85
+ };
86
+ ordType: {
87
+ type: string;
88
+ enum: string[];
89
+ description: string;
90
+ };
91
+ side: {
92
+ type: string;
93
+ enum: string[];
94
+ description: string;
95
+ };
96
+ symbol: {
97
+ type: string;
98
+ };
99
+ timeInForce: {
100
+ type: string;
101
+ enum: string[];
102
+ description: string;
103
+ };
104
+ };
105
+ required: string[];
106
+ };
107
+ };
108
+ marketDataRequest: {
109
+ description: string;
110
+ schema: {
111
+ type: string;
112
+ properties: {
113
+ mdUpdateType: {
114
+ type: string;
115
+ enum: string[];
116
+ description: string;
117
+ };
118
+ symbols: {
119
+ type: string;
120
+ items: {
121
+ type: string;
122
+ };
123
+ };
124
+ mdReqID: {
125
+ type: string;
126
+ };
127
+ subscriptionRequestType: {
128
+ type: string;
129
+ enum: string[];
130
+ description: string;
131
+ };
132
+ mdEntryTypes: {
133
+ type: string;
134
+ items: {
135
+ type: string;
136
+ enum: string[];
137
+ };
138
+ description: string;
139
+ };
140
+ };
141
+ required: string[];
142
+ };
143
+ };
144
+ getStockGraph: {
145
+ description: string;
146
+ schema: {
147
+ type: string;
148
+ properties: {
149
+ symbol: {
150
+ type: string;
151
+ };
152
+ };
153
+ required: string[];
154
+ };
155
+ };
156
+ getStockPriceHistory: {
157
+ description: string;
158
+ schema: {
159
+ type: string;
160
+ properties: {
161
+ symbol: {
162
+ type: string;
163
+ };
164
+ };
165
+ required: string[];
166
+ };
167
+ };
168
+ };
@@ -0,0 +1,17 @@
1
+ import type { IFIXParser, Message } from 'fixparser';
2
+ import type { ToolHandlers, VerifiedOrder } from '../schemas';
3
+ export declare const createToolHandlers: (
4
+ parser: IFIXParser,
5
+ verifiedOrders: Map<string, VerifiedOrder>,
6
+ pendingRequests: Map<string, (data: Message) => void>,
7
+ marketDataPrices: Map<
8
+ string,
9
+ {
10
+ timestamp: number;
11
+ bid: number;
12
+ offer: number;
13
+ spread: number;
14
+ volume: number;
15
+ }[]
16
+ >,
17
+ ) => ToolHandlers;
@@ -0,0 +1,40 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { type IFIXParser, type Message } from 'fixparser';
3
+ export declare const createMarketDataRequestHandler: (
4
+ parser: IFIXParser,
5
+ pendingRequests: Map<string, (data: Message) => void>,
6
+ ) => (args: {
7
+ mdUpdateType: string;
8
+ symbols: string[];
9
+ mdReqID: string;
10
+ subscriptionRequestType: string;
11
+ mdEntryTypes?: string[];
12
+ }) => Promise<CallToolResult>;
13
+ export declare const createGetStockGraphHandler: (
14
+ marketDataPrices: Map<
15
+ string,
16
+ Array<{
17
+ timestamp: number;
18
+ bid: number;
19
+ offer: number;
20
+ spread: number;
21
+ volume: number;
22
+ }>
23
+ >,
24
+ ) => (args: {
25
+ symbol: string;
26
+ }) => Promise<CallToolResult>;
27
+ export declare const createGetStockPriceHistoryHandler: (
28
+ marketDataPrices: Map<
29
+ string,
30
+ Array<{
31
+ timestamp: number;
32
+ bid: number;
33
+ offer: number;
34
+ spread: number;
35
+ volume: number;
36
+ }>
37
+ >,
38
+ ) => (args: {
39
+ symbol: string;
40
+ }) => Promise<CallToolResult>;
@@ -0,0 +1,12 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { type IFIXParser, type Message } from 'fixparser';
3
+ import type { VerifiedOrder } from '../schemas';
4
+ export declare const createVerifyOrderHandler: (
5
+ parser: IFIXParser,
6
+ verifiedOrders: Map<string, VerifiedOrder>,
7
+ ) => (args: VerifiedOrder) => Promise<CallToolResult>;
8
+ export declare const createExecuteOrderHandler: (
9
+ parser: IFIXParser,
10
+ verifiedOrders: Map<string, VerifiedOrder>,
11
+ pendingRequests: Map<string, (data: Message) => void>,
12
+ ) => (args: VerifiedOrder) => Promise<CallToolResult>;
@@ -0,0 +1,5 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { IFIXParser } from 'fixparser';
3
+ export declare const createParseHandler: (parser: IFIXParser) => (args: {
4
+ fixString: string;
5
+ }) => Promise<CallToolResult>;
@@ -0,0 +1,5 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { IFIXParser } from 'fixparser';
3
+ export declare const createParseToJSONHandler: (parser: IFIXParser) => (args: {
4
+ fixString: string;
5
+ }) => Promise<CallToolResult>;
@@ -0,0 +1,18 @@
1
+ import { type IFIXParser, type Message } from 'fixparser';
2
+ export type MarketDataEntry = {
3
+ timestamp: number;
4
+ bid: number;
5
+ offer: number;
6
+ spread: number;
7
+ volume: number;
8
+ };
9
+ export type MarketDataPrices = Map<string, MarketDataEntry[]>;
10
+ export type PendingRequests = Map<string, (data: Message) => void>;
11
+ export declare function handleMessage(
12
+ message: Message,
13
+ parser: IFIXParser,
14
+ pendingRequests: PendingRequests,
15
+ marketDataPrices: MarketDataPrices,
16
+ maxPriceHistory: number,
17
+ onPriceUpdate?: (symbol: string, data: MarketDataEntry) => void,
18
+ ): void;