stockquotes-mcp 1.0.3

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.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +257 -0
  3. package/README.sample1.png +0 -0
  4. package/dist/index.d.ts +13 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +146 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/server.d.ts +34 -0
  9. package/dist/server.d.ts.map +1 -0
  10. package/dist/server.js +66 -0
  11. package/dist/server.js.map +1 -0
  12. package/dist/stockQuotesService.d.ts +39 -0
  13. package/dist/stockQuotesService.d.ts.map +1 -0
  14. package/dist/stockQuotesService.js +140 -0
  15. package/dist/stockQuotesService.js.map +1 -0
  16. package/dist/toolRegistration.d.ts +9 -0
  17. package/dist/toolRegistration.d.ts.map +1 -0
  18. package/dist/toolRegistration.js +81 -0
  19. package/dist/toolRegistration.js.map +1 -0
  20. package/dist/transports/HttpTransportStrategy.d.ts +52 -0
  21. package/dist/transports/HttpTransportStrategy.d.ts.map +1 -0
  22. package/dist/transports/HttpTransportStrategy.js +167 -0
  23. package/dist/transports/HttpTransportStrategy.js.map +1 -0
  24. package/dist/transports/StdioTransportStrategy.d.ts +37 -0
  25. package/dist/transports/StdioTransportStrategy.d.ts.map +1 -0
  26. package/dist/transports/StdioTransportStrategy.js +54 -0
  27. package/dist/transports/StdioTransportStrategy.js.map +1 -0
  28. package/dist/transports/TransportFactory.d.ts +16 -0
  29. package/dist/transports/TransportFactory.d.ts.map +1 -0
  30. package/dist/transports/TransportFactory.js +24 -0
  31. package/dist/transports/TransportFactory.js.map +1 -0
  32. package/dist/transports/TransportStrategy.d.ts +24 -0
  33. package/dist/transports/TransportStrategy.d.ts.map +1 -0
  34. package/dist/transports/TransportStrategy.js +2 -0
  35. package/dist/transports/TransportStrategy.js.map +1 -0
  36. package/dist/types.d.ts +105 -0
  37. package/dist/types.d.ts.map +1 -0
  38. package/dist/types.js +12 -0
  39. package/dist/types.js.map +1 -0
  40. package/dist/yahooFinanceClient.d.ts +14 -0
  41. package/dist/yahooFinanceClient.d.ts.map +1 -0
  42. package/dist/yahooFinanceClient.js +20 -0
  43. package/dist/yahooFinanceClient.js.map +1 -0
  44. package/package.json +86 -0
@@ -0,0 +1,24 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Transport Strategy Interface
4
+ * Defines the contract for different transport implementations
5
+ */
6
+ export interface TransportStrategy {
7
+ /**
8
+ * Connect the server using the specific transport
9
+ */
10
+ connect(): Promise<void>;
11
+ /**
12
+ * Get the transport type
13
+ */
14
+ getType(): string;
15
+ /**
16
+ * Get the server instance for tool registration
17
+ */
18
+ getServer(): McpServer;
19
+ /**
20
+ * Close the server and cleanup resources
21
+ */
22
+ close(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=TransportStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransportStrategy.d.ts","sourceRoot":"","sources":["../../src/transports/TransportStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,IAAI,SAAS,CAAC;IAEvB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TransportStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransportStrategy.js","sourceRoot":"","sources":["../../src/transports/TransportStrategy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,105 @@
1
+ import { z } from 'zod';
2
+ export declare const StockQuoteSchema: z.ZodObject<{
3
+ ticker: z.ZodString;
4
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
5
+ }, z.core.$strip>;
6
+ export type StockQuoteInput = z.infer<typeof StockQuoteSchema>;
7
+ export interface StockQuoteResponse {
8
+ symbol: string;
9
+ name?: string;
10
+ exchange?: string;
11
+ currency?: string;
12
+ regularMarketPrice?: number;
13
+ regularMarketChange?: number;
14
+ regularMarketChangePercent?: number;
15
+ regularMarketVolume?: number;
16
+ marketCap?: number;
17
+ fiftyTwoWeekLow?: number;
18
+ fiftyTwoWeekHigh?: number;
19
+ averageDailyVolume3Month?: number;
20
+ trailingPE?: number;
21
+ forwardPE?: number;
22
+ dividendYield?: number;
23
+ epsTrailingTwelveMonths?: number;
24
+ epsForward?: number;
25
+ bookValue?: number;
26
+ priceToBook?: number;
27
+ marketState?: string;
28
+ quoteType?: string;
29
+ [key: string]: unknown;
30
+ }
31
+ export interface StockSearchResult {
32
+ symbol: string;
33
+ name: string;
34
+ exchange: string;
35
+ }
36
+ export interface HistoricalData {
37
+ date: string;
38
+ close: number;
39
+ high: number;
40
+ low: number;
41
+ volume: number;
42
+ }
43
+ export type TransportType = 'stdio' | 'http';
44
+ export interface ServerConfig {
45
+ name: string;
46
+ version: string;
47
+ transport: TransportType;
48
+ httpPort?: number;
49
+ httpHost?: string;
50
+ }
51
+ export interface YahooQuote {
52
+ symbol?: string;
53
+ shortName?: string;
54
+ longName?: string;
55
+ exchange?: string;
56
+ currency?: string;
57
+ regularMarketPrice?: number;
58
+ regularMarketChange?: number;
59
+ regularMarketChangePercent?: number;
60
+ regularMarketVolume?: number;
61
+ marketCap?: number;
62
+ fiftyTwoWeekLow?: number;
63
+ fiftyTwoWeekHigh?: number;
64
+ averageDailyVolume3Month?: number;
65
+ trailingPE?: number;
66
+ forwardPE?: number;
67
+ dividendYield?: number;
68
+ epsTrailingTwelveMonths?: number;
69
+ epsForward?: number;
70
+ bookValue?: number;
71
+ priceToBook?: number;
72
+ marketState?: string;
73
+ quoteType?: string;
74
+ [key: string]: unknown;
75
+ }
76
+ export interface YahooSearchQuote {
77
+ symbol?: string;
78
+ shortname?: string;
79
+ longname?: string;
80
+ exchange?: string;
81
+ [key: string]: unknown;
82
+ }
83
+ export interface YahooSearchResponse {
84
+ quotes?: YahooSearchQuote[];
85
+ [key: string]: unknown;
86
+ }
87
+ export interface YahooHistoricalQuote {
88
+ date?: number | Date;
89
+ open?: number;
90
+ high?: number;
91
+ low?: number;
92
+ close?: number;
93
+ adjClose?: number;
94
+ volume?: number;
95
+ [key: string]: unknown;
96
+ }
97
+ export interface YahooChartResponse {
98
+ quotes?: YahooHistoricalQuote[];
99
+ meta?: {
100
+ symbol?: string;
101
+ [key: string]: unknown;
102
+ };
103
+ [key: string]: unknown;
104
+ }
105
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ // Schema for stock quote tool input
3
+ export const StockQuoteSchema = z.object({
4
+ ticker: z
5
+ .string()
6
+ .min(1)
7
+ .max(10)
8
+ .toUpperCase()
9
+ .describe('Stock ticker symbol (e.g., AAPL, GOOGL, MSFT)'),
10
+ fields: z.array(z.string()).optional().describe('Optional list of specific fields to return'),
11
+ });
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oCAAoC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,WAAW,EAAE;SACb,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CAC9F,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { YahooChartResponse, YahooQuote, YahooSearchResponse } from './types.js';
2
+ export interface YahooClient {
3
+ quote(symbol: string, options?: object): Promise<YahooQuote | YahooQuote[]>;
4
+ search(query: string, options?: unknown, moduleOptions?: object): Promise<YahooSearchResponse>;
5
+ chart(symbol: string, options?: unknown, moduleOptions?: object): Promise<YahooChartResponse>;
6
+ }
7
+ export declare class YahooFinanceClient implements YahooClient {
8
+ private client;
9
+ constructor(client?: unknown);
10
+ quote(symbol: string, options?: object): Promise<YahooQuote | YahooQuote[]>;
11
+ search(query: string, options?: unknown, moduleOptions?: object): Promise<YahooSearchResponse>;
12
+ chart(symbol: string, options?: unknown, moduleOptions?: object): Promise<YahooChartResponse>;
13
+ }
14
+ //# sourceMappingURL=yahooFinanceClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yahooFinanceClient.d.ts","sourceRoot":"","sources":["../src/yahooFinanceClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/F,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC/F;AAED,qBAAa,kBAAmB,YAAW,WAAW;IACpD,OAAO,CAAC,MAAM,CAAU;gBAEZ,MAAM,CAAC,EAAE,OAAO;IAItB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;IAQ3E,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,mBAAmB,CAAC;IAOzB,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC;CAM/B"}
@@ -0,0 +1,20 @@
1
+ import YahooFinance from 'yahoo-finance2';
2
+ export class YahooFinanceClient {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client ?? new YahooFinance();
6
+ }
7
+ async quote(symbol, options) {
8
+ const result = await this.client.quote(symbol, options);
9
+ return result;
10
+ }
11
+ async search(query, options, moduleOptions) {
12
+ const result = await this.client.search(query, options, moduleOptions);
13
+ return result;
14
+ }
15
+ async chart(symbol, options, moduleOptions) {
16
+ const result = await this.client.chart(symbol, options, moduleOptions);
17
+ return result;
18
+ }
19
+ }
20
+ //# sourceMappingURL=yahooFinanceClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yahooFinanceClient.js","sourceRoot":"","sources":["../src/yahooFinanceClient.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAS1C,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAU;IAExB,YAAY,MAAgB;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,OAAgB;QAC1C,MAAM,MAAM,GAAG,MAAO,IAAI,CAAC,MAA6D,CAAC,KAAK,CAC5F,MAAM,EACN,OAAO,CACR,CAAC;QACF,OAAO,MAAmC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CACV,KAAa,EACb,OAAiB,EACjB,aAAsB;QAEtB,MAAM,MAAM,GAAG,MACb,IAAI,CAAC,MACN,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACxC,OAAO,MAA6B,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK,CACT,MAAc,EACd,OAAiB,EACjB,aAAsB;QAEtB,MAAM,MAAM,GAAG,MACb,IAAI,CAAC,MACN,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACxC,OAAO,MAA4B,CAAC;IACtC,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "stockquotes-mcp",
3
+ "version": "1.0.3",
4
+ "description": "MCP Server for fetching stock quotes from Yahoo Finance",
5
+ "author": "Lionel Schiepers <lionel_schiepers@hotmail.com>",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/lionelschiepers/StockQuotes.MCP.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/lionelschiepers/StockQuotes.MCP/issues"
13
+ },
14
+ "homepage": "https://github.com/lionelschiepers/StockQuotes.MCP#readme",
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "type": "module",
19
+ "main": "dist/index.js",
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "types": "dist/index.d.ts",
24
+ "bin": {
25
+ "stock-quotes-mcp": "dist/index.js"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc",
29
+ "build:watch": "tsc --watch",
30
+ "lint": "eslint src/**/*.ts",
31
+ "lint:fix": "eslint src/**/*.ts --fix",
32
+ "format": "prettier --write src/**/*.ts",
33
+ "format:check": "prettier --check src/**/*.ts",
34
+ "test": "jest",
35
+ "test:coverage": "jest --coverage",
36
+ "test:watch": "jest --watch",
37
+ "start": "node dist/index.js",
38
+ "start:stdio": "node dist/index.js --transport stdio",
39
+ "start:http": "node dist/index.js --transport http --http-host localhost",
40
+ "dev": "tsx watch src/index.ts --transport stdio",
41
+ "clean": "rm -rf dist",
42
+ "inspect": "tsc && npx -y @modelcontextprotocol/inspector node dist/index.js",
43
+ "prepare": "husky",
44
+ "prepublishOnly": "npm run build && npm run test",
45
+ "publish": "npm publish",
46
+ "publish:dry": "npm publish --dry-run"
47
+ },
48
+ "keywords": [
49
+ "mcp",
50
+ "stock-quotes",
51
+ "yahoo-finance",
52
+ "mcp-server",
53
+ "ai-tools",
54
+ "financial data",
55
+ "finance",
56
+ "api"
57
+ ],
58
+ "dependencies": {
59
+ "@modelcontextprotocol/sdk": "^1.25.2",
60
+ "date-fns": "^4.1.0",
61
+ "express": "^5.2.1",
62
+ "yahoo-finance2": "^3.11.2",
63
+ "zod": "^4.3.5"
64
+ },
65
+ "devDependencies": {
66
+ "@types/express": "^5.0.6",
67
+ "@types/jest": "^30.0.0",
68
+ "@types/node": "^25.0.8",
69
+ "@types/supertest": "^6.0.3",
70
+ "@typescript-eslint/eslint-plugin": "^8.53.0",
71
+ "@typescript-eslint/parser": "^8.53.0",
72
+ "eslint": "^9.39.2",
73
+ "eslint-config-prettier": "^10.1.8",
74
+ "husky": "^9.1.7",
75
+ "jest": "^30.2.0",
76
+ "npm-check-updates": "^19.3.1",
77
+ "prettier": "^3.7.4",
78
+ "supertest": "^7.2.2",
79
+ "ts-jest": "^29.4.6",
80
+ "tsx": "^4.21.0",
81
+ "typescript": "^5.9.3"
82
+ },
83
+ "engines": {
84
+ "node": ">=24.0.0"
85
+ }
86
+ }