@ontosdk/mcp 1.0.2 → 1.1.0
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/dist/index.d.ts +124 -6
- package/dist/index.js +283 -8
- package/dist/index.js.map +1 -1
- package/dist/server.js +374 -109
- package/dist/server.js.map +1 -1
- package/package.json +13 -4
- package/dist/lib/api-client.d.ts +0 -11
- package/dist/lib/api-client.js +0 -88
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/errors.d.ts +0 -2
- package/dist/lib/errors.js +0 -24
- package/dist/lib/errors.js.map +0 -1
- package/dist/lib/types.d.ts +0 -76
- package/dist/lib/types.js +0 -4
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/version.d.ts +0 -1
- package/dist/lib/version.js +0 -2
- package/dist/lib/version.js.map +0 -1
- package/dist/server.d.ts +0 -2
- package/dist/tools/read-and-score.d.ts +0 -14
- package/dist/tools/read-and-score.js +0 -43
- package/dist/tools/read-and-score.js.map +0 -1
- package/dist/tools/read.d.ts +0 -14
- package/dist/tools/read.js +0 -36
- package/dist/tools/read.js.map +0 -1
- package/dist/tools/score.d.ts +0 -13
- package/dist/tools/score.js +0 -71
- package/dist/tools/score.js.map +0 -1
package/dist/lib/api-client.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/* Thin HTTP wrapper around the Onto Read API. Reads ONTO_API_KEY at call time
|
|
2
|
-
* (not module-load) so server.ts can fail with a clean error message first. */
|
|
3
|
-
import { version as PACKAGE_VERSION } from './version.js';
|
|
4
|
-
const DEFAULT_BASE = 'https://api.buildonto.dev';
|
|
5
|
-
const REQUEST_TIMEOUT_MS = 15_000;
|
|
6
|
-
export class OntoApiError extends Error {
|
|
7
|
-
status;
|
|
8
|
-
code;
|
|
9
|
-
constructor(message, status, code) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.status = status;
|
|
12
|
-
this.code = code;
|
|
13
|
-
this.name = 'OntoApiError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export async function callOntoApi(endpoint, options) {
|
|
17
|
-
const apiKey = process.env.ONTO_API_KEY;
|
|
18
|
-
if (!apiKey) {
|
|
19
|
-
throw new OntoApiError('ONTO_API_KEY environment variable is not set. Get a key at https://app.buildonto.dev/read/keys', 0, 'NO_API_KEY');
|
|
20
|
-
}
|
|
21
|
-
const base = process.env.ONTO_API_BASE ?? DEFAULT_BASE;
|
|
22
|
-
const url = `${base}${endpoint}`;
|
|
23
|
-
const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS);
|
|
24
|
-
const signal = options.signal
|
|
25
|
-
? AbortSignal.any([options.signal, timeout])
|
|
26
|
-
: timeout;
|
|
27
|
-
let response;
|
|
28
|
-
try {
|
|
29
|
-
response = await fetch(url, {
|
|
30
|
-
method: 'POST',
|
|
31
|
-
headers: {
|
|
32
|
-
Authorization: `Bearer ${apiKey}`,
|
|
33
|
-
'Content-Type': 'application/json',
|
|
34
|
-
'User-Agent': `@ontosdk/mcp/${PACKAGE_VERSION}`,
|
|
35
|
-
},
|
|
36
|
-
body: JSON.stringify(options.body),
|
|
37
|
-
signal,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
if (err instanceof DOMException && err.name === 'TimeoutError') {
|
|
42
|
-
throw new OntoApiError(`Onto API request timed out after ${REQUEST_TIMEOUT_MS / 1000}s. The target site may be slow or unreachable.`, 0, 'TIMEOUT');
|
|
43
|
-
}
|
|
44
|
-
throw new OntoApiError(`Failed to reach Onto API at ${base}: ${err.message}`, 0, 'NETWORK_ERROR');
|
|
45
|
-
}
|
|
46
|
-
const rawBody = await response.text();
|
|
47
|
-
if (!response.ok) {
|
|
48
|
-
let parsed = {};
|
|
49
|
-
try {
|
|
50
|
-
parsed = JSON.parse(rawBody);
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// Body wasn't JSON; fall through with status-code-only error
|
|
54
|
-
}
|
|
55
|
-
const message = humanizeError(response.status, parsed);
|
|
56
|
-
throw new OntoApiError(message, response.status, parsed.error);
|
|
57
|
-
}
|
|
58
|
-
try {
|
|
59
|
-
return JSON.parse(rawBody);
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
throw new OntoApiError(`Onto API returned invalid JSON: ${err.message}`, response.status, 'INVALID_RESPONSE');
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
function humanizeError(status, body) {
|
|
66
|
-
if (status === 401) {
|
|
67
|
-
return 'Invalid Onto API key. Verify your key at https://app.buildonto.dev/read/keys';
|
|
68
|
-
}
|
|
69
|
-
if (status === 402) {
|
|
70
|
-
return (body.message ??
|
|
71
|
-
'Monthly plan quota exceeded and credit balance is empty. Top up credits at https://app.buildonto.dev/read/billing');
|
|
72
|
-
}
|
|
73
|
-
if (status === 403) {
|
|
74
|
-
if (body.error === 'ROBOTS_BLOCKED') {
|
|
75
|
-
return body.message ?? 'The target site blocks AI crawlers via robots.txt.';
|
|
76
|
-
}
|
|
77
|
-
return body.message ?? 'Forbidden.';
|
|
78
|
-
}
|
|
79
|
-
if (status === 429) {
|
|
80
|
-
return (body.message ??
|
|
81
|
-
'Onto API rate limit exceeded. Upgrade your tier at https://app.buildonto.dev/read/billing or wait for the monthly reset.');
|
|
82
|
-
}
|
|
83
|
-
if (status >= 500) {
|
|
84
|
-
return body.message ?? `Onto API server error (${status}). Try again in a moment.`;
|
|
85
|
-
}
|
|
86
|
-
return body.message ?? `Onto API returned ${status}.`;
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=api-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/errors.d.ts
DELETED
package/dist/lib/errors.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/* Format errors as MCP tool responses. We don't throw McpError for
|
|
2
|
-
* tool-call failures — the AI host shows tool errors to the user as
|
|
3
|
-
* unhelpful internal-error messages. Returning isError: true with a
|
|
4
|
-
* text body lets the model see what went wrong and recover. */
|
|
5
|
-
import { OntoApiError } from './api-client.js';
|
|
6
|
-
export function formatToolError(error) {
|
|
7
|
-
if (error instanceof OntoApiError) {
|
|
8
|
-
return {
|
|
9
|
-
content: [{ type: 'text', text: error.message }],
|
|
10
|
-
isError: true,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
14
|
-
return {
|
|
15
|
-
content: [
|
|
16
|
-
{
|
|
17
|
-
type: 'text',
|
|
18
|
-
text: `Onto MCP error: ${message}\n\nTroubleshooting:\n- Verify ONTO_API_KEY is set and valid (https://app.buildonto.dev/read/keys)\n- Check the target URL is publicly accessible\n- Check your monthly quota at https://app.buildonto.dev/read/usage`,
|
|
19
|
-
},
|
|
20
|
-
],
|
|
21
|
-
isError: true,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=errors.js.map
|
package/dist/lib/errors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;+DAG+D;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAChD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,mBAAmB,OAAO,uNAAuN;aACxP;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
package/dist/lib/types.d.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
export interface ReadResponse {
|
|
2
|
-
status: 'success';
|
|
3
|
-
url: string;
|
|
4
|
-
markdown: string;
|
|
5
|
-
metadata: {
|
|
6
|
-
title: string;
|
|
7
|
-
description: string;
|
|
8
|
-
language?: string;
|
|
9
|
-
};
|
|
10
|
-
stats: {
|
|
11
|
-
raw_html_size_kb: number;
|
|
12
|
-
markdown_size_kb: number;
|
|
13
|
-
reduction_percent: number;
|
|
14
|
-
extraction_time_ms: number;
|
|
15
|
-
};
|
|
16
|
-
cache: {
|
|
17
|
-
hit: boolean;
|
|
18
|
-
ttl_seconds: number;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
export interface Recommendation {
|
|
22
|
-
title?: string;
|
|
23
|
-
description?: string;
|
|
24
|
-
priority?: 'High' | 'Medium' | 'Low' | string;
|
|
25
|
-
[key: string]: unknown;
|
|
26
|
-
}
|
|
27
|
-
export interface ScoreResponse {
|
|
28
|
-
status: 'success';
|
|
29
|
-
url: string;
|
|
30
|
-
aio_score: number;
|
|
31
|
-
grade: string;
|
|
32
|
-
hallucination_risk: 'low' | 'medium' | 'high';
|
|
33
|
-
insights: Record<string, boolean>;
|
|
34
|
-
penalties: string[];
|
|
35
|
-
benefits: string[];
|
|
36
|
-
recommendations: Recommendation[];
|
|
37
|
-
stats: {
|
|
38
|
-
raw_size: string;
|
|
39
|
-
efficiency: string;
|
|
40
|
-
extraction_time_ms: number;
|
|
41
|
-
};
|
|
42
|
-
bot_preview?: unknown;
|
|
43
|
-
}
|
|
44
|
-
export interface ReadAndScoreResponse {
|
|
45
|
-
status: 'success';
|
|
46
|
-
url: string;
|
|
47
|
-
markdown: string;
|
|
48
|
-
metadata: {
|
|
49
|
-
title: string;
|
|
50
|
-
description: string;
|
|
51
|
-
language?: string;
|
|
52
|
-
};
|
|
53
|
-
aio_score: number;
|
|
54
|
-
grade: string;
|
|
55
|
-
hallucination_risk: 'low' | 'medium' | 'high';
|
|
56
|
-
insights: Record<string, boolean>;
|
|
57
|
-
penalties: string[];
|
|
58
|
-
benefits: string[];
|
|
59
|
-
recommendations: Recommendation[];
|
|
60
|
-
stats: {
|
|
61
|
-
raw_html_size_kb: number;
|
|
62
|
-
markdown_size_kb: number;
|
|
63
|
-
reduction_percent: number;
|
|
64
|
-
extraction_time_ms: number;
|
|
65
|
-
};
|
|
66
|
-
cache: {
|
|
67
|
-
hit: boolean;
|
|
68
|
-
ttl_seconds: number;
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
export interface ApiErrorBody {
|
|
72
|
-
status: 'error';
|
|
73
|
-
error: string;
|
|
74
|
-
message: string;
|
|
75
|
-
details?: Record<string, unknown>;
|
|
76
|
-
}
|
package/dist/lib/types.js
DELETED
package/dist/lib/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;4CAC4C"}
|
package/dist/lib/version.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const version = "1.0.2";
|
package/dist/lib/version.js
DELETED
package/dist/lib/version.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
package/dist/server.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
export declare const readAndScoreInputSchema: z.ZodObject<{
|
|
4
|
-
url: z.ZodString;
|
|
5
|
-
fresh: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
6
|
-
}, "strip", z.ZodTypeAny, {
|
|
7
|
-
url: string;
|
|
8
|
-
fresh: boolean;
|
|
9
|
-
}, {
|
|
10
|
-
url: string;
|
|
11
|
-
fresh?: boolean | undefined;
|
|
12
|
-
}>;
|
|
13
|
-
export type ReadAndScoreInput = z.infer<typeof readAndScoreInputSchema>;
|
|
14
|
-
export declare function readAndScore(input: ReadAndScoreInput): Promise<CallToolResult>;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { callOntoApi } from '../lib/api-client.js';
|
|
3
|
-
import { formatToolError } from '../lib/errors.js';
|
|
4
|
-
export const readAndScoreInputSchema = z.object({
|
|
5
|
-
url: z.string().url(),
|
|
6
|
-
fresh: z.boolean().optional().default(false),
|
|
7
|
-
});
|
|
8
|
-
export async function readAndScore(input) {
|
|
9
|
-
try {
|
|
10
|
-
const result = await callOntoApi('/v1/read-and-score', {
|
|
11
|
-
body: { url: input.url, fresh: input.fresh },
|
|
12
|
-
});
|
|
13
|
-
const trustHint = trustLine(result.aio_score, result.hallucination_risk);
|
|
14
|
-
const summaryLines = [
|
|
15
|
-
`**Source quality assessment (from Onto):**`,
|
|
16
|
-
`- AIO Score: ${result.aio_score}/100 (${result.grade})`,
|
|
17
|
-
`- Hallucination risk: ${result.hallucination_risk}`,
|
|
18
|
-
`- Reduction: ${result.stats.reduction_percent}% (${result.stats.raw_html_size_kb} KB → ${result.stats.markdown_size_kb} KB)`,
|
|
19
|
-
`- Cache: ${result.cache.hit ? 'HIT' : 'MISS'}`,
|
|
20
|
-
'',
|
|
21
|
-
trustHint,
|
|
22
|
-
];
|
|
23
|
-
return {
|
|
24
|
-
content: [
|
|
25
|
-
{ type: 'text', text: result.markdown },
|
|
26
|
-
{ type: 'text', text: `\n\n---\n\n${summaryLines.join('\n')}` },
|
|
27
|
-
],
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
return formatToolError(error);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
function trustLine(score, risk) {
|
|
35
|
-
if (risk === 'high' || score < 40) {
|
|
36
|
-
return 'Trust signal: low — this source is poorly structured for AI consumption. Verify any facts before relying on them.';
|
|
37
|
-
}
|
|
38
|
-
if (risk === 'medium' || score < 70) {
|
|
39
|
-
return 'Trust signal: medium — source is partially AI-readable. Cross-check critical claims.';
|
|
40
|
-
}
|
|
41
|
-
return 'Trust signal: high — source is well-structured for AI consumption.';
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=read-and-score.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-and-score.js","sourceRoot":"","sources":["../../src/tools/read-and-score.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC7C,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAwB;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAuB,oBAAoB,EAAE;YAC3E,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SAC7C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACzE,MAAM,YAAY,GAAG;YACnB,4CAA4C;YAC5C,gBAAgB,MAAM,CAAC,SAAS,SAAS,MAAM,CAAC,KAAK,GAAG;YACxD,yBAAyB,MAAM,CAAC,kBAAkB,EAAE;YACpD,gBAAgB,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,SAAS,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM;YAC7H,YAAY,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;YAC/C,EAAE;YACF,SAAS;SACV,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAChD,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,cAAc,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;aACzE;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,IAA+B;IAC/D,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QAClC,OAAO,mHAAmH,CAAC;IAC7H,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACpC,OAAO,sFAAsF,CAAC;IAChG,CAAC;IACD,OAAO,oEAAoE,CAAC;AAC9E,CAAC"}
|
package/dist/tools/read.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
export declare const readUrlInputSchema: z.ZodObject<{
|
|
4
|
-
url: z.ZodString;
|
|
5
|
-
fresh: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
6
|
-
}, "strip", z.ZodTypeAny, {
|
|
7
|
-
url: string;
|
|
8
|
-
fresh: boolean;
|
|
9
|
-
}, {
|
|
10
|
-
url: string;
|
|
11
|
-
fresh?: boolean | undefined;
|
|
12
|
-
}>;
|
|
13
|
-
export type ReadUrlInput = z.infer<typeof readUrlInputSchema>;
|
|
14
|
-
export declare function readUrl(input: ReadUrlInput): Promise<CallToolResult>;
|
package/dist/tools/read.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { callOntoApi } from '../lib/api-client.js';
|
|
3
|
-
import { formatToolError } from '../lib/errors.js';
|
|
4
|
-
export const readUrlInputSchema = z.object({
|
|
5
|
-
url: z.string().url(),
|
|
6
|
-
fresh: z.boolean().optional().default(false),
|
|
7
|
-
});
|
|
8
|
-
export async function readUrl(input) {
|
|
9
|
-
try {
|
|
10
|
-
const result = await callOntoApi('/v1/read', {
|
|
11
|
-
body: { url: input.url, fresh: input.fresh },
|
|
12
|
-
});
|
|
13
|
-
const metaLines = [
|
|
14
|
-
`- URL: ${result.url}`,
|
|
15
|
-
`- Title: ${result.metadata.title || '(none)'}`,
|
|
16
|
-
`- Original size: ${result.stats.raw_html_size_kb} KB`,
|
|
17
|
-
`- Cleaned size: ${result.stats.markdown_size_kb} KB`,
|
|
18
|
-
`- Reduction: ${result.stats.reduction_percent}%`,
|
|
19
|
-
`- Extraction time: ${result.stats.extraction_time_ms} ms`,
|
|
20
|
-
`- Cache: ${result.cache.hit ? 'HIT' : 'MISS'}`,
|
|
21
|
-
].join('\n');
|
|
22
|
-
return {
|
|
23
|
-
content: [
|
|
24
|
-
{ type: 'text', text: result.markdown },
|
|
25
|
-
{
|
|
26
|
-
type: 'text',
|
|
27
|
-
text: `\n\n---\n\n**Source metadata (from Onto):**\n${metaLines}`,
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
return formatToolError(error);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=read.js.map
|
package/dist/tools/read.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC7C,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAmB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAe,UAAU,EAAE;YACzD,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SAC7C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG;YAChB,UAAU,MAAM,CAAC,GAAG,EAAE;YACtB,YAAY,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,EAAE;YAC/C,oBAAoB,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK;YACtD,mBAAmB,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK;YACrD,gBAAgB,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG;YACjD,sBAAsB,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK;YAC1D,YAAY,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;SAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAChD;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gDAAgD,SAAS,EAAE;iBAClE;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
package/dist/tools/score.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
import type { ScoreResponse } from '../lib/types.js';
|
|
4
|
-
export declare const scoreUrlInputSchema: z.ZodObject<{
|
|
5
|
-
url: z.ZodString;
|
|
6
|
-
}, "strip", z.ZodTypeAny, {
|
|
7
|
-
url: string;
|
|
8
|
-
}, {
|
|
9
|
-
url: string;
|
|
10
|
-
}>;
|
|
11
|
-
export type ScoreUrlInput = z.infer<typeof scoreUrlInputSchema>;
|
|
12
|
-
export declare function scoreUrl(input: ScoreUrlInput): Promise<CallToolResult>;
|
|
13
|
-
export declare function formatScoreSummary(result: ScoreResponse): string;
|
package/dist/tools/score.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { callOntoApi } from '../lib/api-client.js';
|
|
3
|
-
import { formatToolError } from '../lib/errors.js';
|
|
4
|
-
export const scoreUrlInputSchema = z.object({
|
|
5
|
-
url: z.string().url(),
|
|
6
|
-
});
|
|
7
|
-
export async function scoreUrl(input) {
|
|
8
|
-
try {
|
|
9
|
-
const result = await callOntoApi('/v1/score', {
|
|
10
|
-
body: { url: input.url },
|
|
11
|
-
});
|
|
12
|
-
return {
|
|
13
|
-
content: [{ type: 'text', text: formatScoreSummary(result) }],
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
return formatToolError(error);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export function formatScoreSummary(result) {
|
|
21
|
-
const lines = [
|
|
22
|
-
`**AIO Score:** ${result.aio_score}/100 (${result.grade})`,
|
|
23
|
-
`**Hallucination risk:** ${result.hallucination_risk}`,
|
|
24
|
-
`**URL:** ${result.url}`,
|
|
25
|
-
'',
|
|
26
|
-
];
|
|
27
|
-
if (result.benefits.length > 0) {
|
|
28
|
-
lines.push('**What works well:**');
|
|
29
|
-
for (const item of result.benefits)
|
|
30
|
-
lines.push(`- ${item}`);
|
|
31
|
-
lines.push('');
|
|
32
|
-
}
|
|
33
|
-
if (result.penalties.length > 0) {
|
|
34
|
-
lines.push('**What hurts AI readability:**');
|
|
35
|
-
for (const item of result.penalties)
|
|
36
|
-
lines.push(`- ${item}`);
|
|
37
|
-
lines.push('');
|
|
38
|
-
}
|
|
39
|
-
const insightEntries = Object.entries(result.insights ?? {});
|
|
40
|
-
if (insightEntries.length > 0) {
|
|
41
|
-
lines.push('**Insights:**');
|
|
42
|
-
for (const [key, value] of insightEntries) {
|
|
43
|
-
lines.push(`- ${key}: ${value ? 'yes' : 'no'}`);
|
|
44
|
-
}
|
|
45
|
-
lines.push('');
|
|
46
|
-
}
|
|
47
|
-
if (result.recommendations.length > 0) {
|
|
48
|
-
lines.push('**Recommendations:**');
|
|
49
|
-
for (const rec of result.recommendations) {
|
|
50
|
-
lines.push(describeRecommendation(rec));
|
|
51
|
-
}
|
|
52
|
-
lines.push('');
|
|
53
|
-
}
|
|
54
|
-
lines.push('**Stats:**');
|
|
55
|
-
lines.push(`- Raw size: ${result.stats.raw_size}`);
|
|
56
|
-
lines.push(`- Efficiency: ${result.stats.efficiency}`);
|
|
57
|
-
lines.push(`- Extraction time: ${result.stats.extraction_time_ms} ms`);
|
|
58
|
-
return lines.join('\n');
|
|
59
|
-
}
|
|
60
|
-
function describeRecommendation(rec) {
|
|
61
|
-
if (typeof rec === 'string')
|
|
62
|
-
return `- ${rec}`;
|
|
63
|
-
if (rec.title) {
|
|
64
|
-
const head = rec.priority ? `**${rec.title}** _(priority: ${rec.priority})_` : `**${rec.title}**`;
|
|
65
|
-
return rec.description ? `- ${head} — ${rec.description}` : `- ${head}`;
|
|
66
|
-
}
|
|
67
|
-
if (rec.description)
|
|
68
|
-
return `- ${rec.description}`;
|
|
69
|
-
return `- ${JSON.stringify(rec)}`;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=score.js.map
|
package/dist/tools/score.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"score.js","sourceRoot":"","sources":["../../src/tools/score.ts"],"names":[],"mappings":"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"}
|