@etsquare/sev-mcp 0.1.0 → 0.1.1

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.
package/README.md CHANGED
@@ -19,7 +19,7 @@ Add to ~/.codex/config.toml:
19
19
  ```toml
20
20
  [mcp_servers.sev]
21
21
  command = "npx"
22
- args = ["-y","@etsquare/sev-mcp@0.1.0"]
22
+ args = ["-y","@etsquare/sev-mcp@0.1.1"]
23
23
  startup_timeout_sec = 30
24
24
  tool_timeout_sec = 25
25
25
 
@@ -33,7 +33,7 @@ SEV_API_KEY = "YOUR_SEV_API_KEY"
33
33
  ```toml
34
34
  [mcp_servers.sev]
35
35
  command = "cmd"
36
- args = ["/c","npx","-y","@etsquare/sev-mcp@0.1.0"]
36
+ args = ["/c","npx","-y","@etsquare/sev-mcp@0.1.1"]
37
37
  startup_timeout_sec = 30
38
38
  tool_timeout_sec = 25
39
39
 
@@ -53,7 +53,7 @@ Merge into your Claude Desktop configuration JSON:
53
53
  "command": "npx",
54
54
  "args": [
55
55
  "-y",
56
- "@etsquare/sev-mcp@0.1.0"
56
+ "@etsquare/sev-mcp@0.1.1"
57
57
  ],
58
58
  "env": {
59
59
  "SEV_BASE_URL": "https://etsquare.ai",
@@ -75,7 +75,7 @@ Merge into your Claude Desktop configuration JSON:
75
75
  "/c",
76
76
  "npx",
77
77
  "-y",
78
- "@etsquare/sev-mcp@0.1.0"
78
+ "@etsquare/sev-mcp@0.1.1"
79
79
  ],
80
80
  "env": {
81
81
  "SEV_BASE_URL": "https://etsquare.ai",
@@ -91,6 +91,8 @@ Merge into your Claude Desktop configuration JSON:
91
91
  - **discover_sec_companies**: required question; optional tickers **or** four-digit sic_codes, inclusive filed_since (YYYY-MM-DD), and max_companies (default 10, maximum 50). Explicit filters are never relaxed. There is no hidden date default.
92
92
  - **get_sec_passage**: retrieve a returned passage_id and available neighboring context without restarting discovery. Clients supporting MCP resources can also read sev://passages/{passage_id}.
93
93
 
94
+ Passage IDs accept uppercase, lowercase or mixed-case hexadecimal. Returned IDs may use their canonical uppercase form.
95
+
94
96
  Returned references include company identity, accession, form, filing date, section, source URL and stable passage identifier. Optional previews are verbatim. Rankings describe research relevance, not investment merit or proof of current impact.
95
97
 
96
98
  Try: ?Which retailers describe overseas factories or sourcing agents and exposure to higher merchandise costs??
package/client.mjs CHANGED
@@ -51,7 +51,7 @@ export class SevClient {
51
51
  async passage(id,signal){
52
52
  if(!/^[a-f0-9]{32}$/i.test(id))throw new ApiError('invalid_passage_id','Use the passage_id returned by discovery.',400);
53
53
  const result=await this.request('/v1/sec/passages/'+encodeURIComponent(id),undefined,signal);
54
- if(result.passage_id!==id||typeof result.text!=='string'||!Array.isArray(result.adjacent_passages))
54
+ if(typeof result.passage_id!=='string'||result.passage_id.toUpperCase()!==id.toUpperCase()||typeof result.text!=='string'||!Array.isArray(result.adjacent_passages))
55
55
  throw new ApiError('invalid_response','SEV returned an invalid source response.');
56
56
  return result;
57
57
  }
package/index.mjs CHANGED
@@ -15,11 +15,11 @@ const discovery=z.object({
15
15
  filed_since:date.nullable().optional().describe('Inclusive SEC filing date. No hidden date default.'),
16
16
  max_companies:z.number().int().min(1).max(50).default(10),
17
17
  }).strict();
18
- const source=z.object({passage_id:z.string().regex(/^[a-f0-9]{32}$/i)}).strict();
18
+ const source=z.object({passage_id:z.string().regex(/^[A-Fa-f0-9]{32}$/)}).strict();
19
19
  const text=value=>({content:[{type:'text',text:JSON.stringify(value)}],structuredContent:value});
20
20
 
21
21
  export function createServer(client=new SevClient()) {
22
- const server=new McpServer({name:'sev',version:'0.1.0'},{instructions:'SEV finds companies and original SEC passages worth investigating. Rankings indicate research relevance, not investment merit or proof of impact. Follow original sources. Do not automatically repeat a failed or uncertain discovery; it may already have used allowance. Use get_sec_passage for full text and adjacent context.'});
22
+ const server=new McpServer({name:'sev',version:'0.1.1'},{instructions:'SEV finds companies and original SEC passages worth investigating. Rankings indicate research relevance, not investment merit or proof of impact. Follow original sources. Do not automatically repeat a failed or uncertain discovery; it may already have used allowance. Use get_sec_passage for full text and adjacent context.'});
23
23
  const call=operation=>async(input,extra)=>{
24
24
  try{return text(await operation(input,extra.signal));}
25
25
  catch(error){const known=error instanceof ApiError;return {...text({status:'error',error:{code:known?error.code:'client_error',message:known?error.message:'The SEV client could not complete the request.'}}),isError:true};}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsquare/sev-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "SEV company discovery and original SEC passage access over hosted REST.",
5
5
  "type": "module",
6
6
  "license": "MIT",