okfy-ai 0.1.2
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/LICENSE +21 -0
- package/README.md +115 -0
- package/assets/demo.gif +0 -0
- package/assets/logo.svg +14 -0
- package/dist/chunk-C46QXZDU.js +1013 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +151 -0
- package/dist/index.d.ts +179 -0
- package/dist/index.js +40 -0
- package/docs/mcp-clients.md +278 -0
- package/examples/README.md +98 -0
- package/examples/bundles/okfy-docs/concepts/index.md +14 -0
- package/examples/bundles/okfy-docs/concepts/okf-bundle.md +33 -0
- package/examples/bundles/okfy-docs/concepts/progressive-disclosure.md +26 -0
- package/examples/bundles/okfy-docs/guides/import-local-markdown.md +31 -0
- package/examples/bundles/okfy-docs/guides/index.md +14 -0
- package/examples/bundles/okfy-docs/guides/serve-over-mcp.md +29 -0
- package/examples/bundles/okfy-docs/index.md +22 -0
- package/examples/bundles/okfy-docs/okfy-example.json +10 -0
- package/examples/bundles/okfy-docs/reference/index.md +13 -0
- package/examples/bundles/okfy-docs/reference/mcp-tools.md +36 -0
- package/examples/bundles/stripe-checkout-small/index.md +21 -0
- package/examples/bundles/stripe-checkout-small/okfy-example.json +11 -0
- package/examples/bundles/stripe-checkout-small/quickstart.md +26 -0
- package/examples/bundles/stripe-checkout-small/sessions.md +20 -0
- package/examples/bundles/stripe-checkout-small/webhooks.md +19 -0
- package/examples/local-markdown/concepts/okf-bundle.md +19 -0
- package/examples/local-markdown/concepts/progressive-disclosure.md +15 -0
- package/examples/local-markdown/guides/import-local-markdown.md +20 -0
- package/examples/local-markdown/guides/serve-over-mcp.md +17 -0
- package/examples/local-markdown/index.md +11 -0
- package/examples/local-markdown/okfy-example.json +10 -0
- package/examples/local-markdown/reference/mcp-tools.md +25 -0
- package/package.json +71 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
## bundles/okfy-docs
|
|
4
|
+
|
|
5
|
+
Purpose: committed offline OKF bundle used by `okfy demo`.
|
|
6
|
+
|
|
7
|
+
Source command:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm okfy import examples/local-markdown --out examples/bundles/okfy-docs --source-name "okfy docs" --force --stable-timestamps
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Expected concept count:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
9
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Expected validation status:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
valid
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Suggested agent questions:
|
|
26
|
+
|
|
27
|
+
- Search for crawler security defaults, read the relevant concepts, and cite the source resource.
|
|
28
|
+
- Read the MCP setup concept and explain the stdio config.
|
|
29
|
+
- Find importer concepts and list supported input formats.
|
|
30
|
+
|
|
31
|
+
## bundles/stripe-checkout-small
|
|
32
|
+
|
|
33
|
+
Purpose: small curated Stripe Checkout sample for launch demos when live crawling is flaky.
|
|
34
|
+
|
|
35
|
+
Source command:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pnpm okfy import test-fixtures/stripe-checkout-html --out examples/bundles/stripe-checkout-small --source-name "Stripe Checkout sample" --force --stable-timestamps
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Expected concept count:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
4
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Expected validation status:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
valid
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Suggested agent questions:
|
|
54
|
+
|
|
55
|
+
- Search for Checkout Sessions, read the strongest match, and explain required server parameters.
|
|
56
|
+
- Find webhook-related concepts and summarize fulfillment safety notes.
|
|
57
|
+
- Use neighbors to move from the quickstart to the API reference and webhook concepts.
|
|
58
|
+
|
|
59
|
+
## local-markdown
|
|
60
|
+
|
|
61
|
+
Purpose: deterministic offline input for `okfy import`.
|
|
62
|
+
|
|
63
|
+
Source command:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npx -y okfy-ai import ./examples/local-markdown --out ./tmp/okfy-docs --force --stable-timestamps
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Expected concept count:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
9
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Expected validation status:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
valid
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Validate:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npx -y okfy-ai validate ./tmp/okfy-docs
|
|
85
|
+
npx -y okfy-ai inspect ./tmp/okfy-docs
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Serve through MCP:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npx -y okfy-ai serve ./tmp/okfy-docs --mcp
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Suggested agent questions:
|
|
95
|
+
|
|
96
|
+
- Search for import workflow concepts, read the best match, and explain how to convert a local Markdown folder into OKF.
|
|
97
|
+
- Find concepts tagged `mcp`, read the MCP tools concept, and describe the expected tool-call sequence.
|
|
98
|
+
- Read the bundle summary, then identify which concepts are most useful for a first-time okfy user.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "Folder Index"
|
|
3
|
+
title: "Concepts Index"
|
|
4
|
+
description: "Index for concepts."
|
|
5
|
+
resource: "okfy docs"
|
|
6
|
+
tags:
|
|
7
|
+
- "index"
|
|
8
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Concepts Index
|
|
12
|
+
|
|
13
|
+
- [okf-bundle](./okf-bundle.md)
|
|
14
|
+
- [progressive-disclosure](./progressive-disclosure.md)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "Concept"
|
|
3
|
+
title: "OKF Bundle Structure"
|
|
4
|
+
description: "An Open Knowledge Format bundle is a directory of Markdown files with YAML frontmatter. Minimum valid concept: Useful generated fields include title, description, resource, tags, a"
|
|
5
|
+
resource: "concepts/okf-bundle.md"
|
|
6
|
+
tags:
|
|
7
|
+
- "concepts"
|
|
8
|
+
- "okf"
|
|
9
|
+
- "bundle"
|
|
10
|
+
- "structure"
|
|
11
|
+
- "concept"
|
|
12
|
+
- "title"
|
|
13
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
14
|
+
---
|
|
15
|
+
# OKF Bundle Structure
|
|
16
|
+
|
|
17
|
+
An Open Knowledge Format bundle is a directory of Markdown files with YAML frontmatter.
|
|
18
|
+
|
|
19
|
+
Minimum valid concept:
|
|
20
|
+
|
|
21
|
+
```md
|
|
22
|
+
---
|
|
23
|
+
type: Concept
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Concept title
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Useful generated fields include `title`, `description`, `resource`, `tags`, and `timestamp`.
|
|
30
|
+
|
|
31
|
+
okfy keeps output file-based so humans can inspect it, Git can diff it, and MCP clients can read only the concepts they need.
|
|
32
|
+
|
|
33
|
+
Related: [Progressive Disclosure](./progressive-disclosure.md).
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "Documentation Page"
|
|
3
|
+
title: "Progressive Disclosure"
|
|
4
|
+
description: "Progressive disclosure means an agent starts with small previews and only loads full concept content when needed. For okfy, the default pattern is: This keeps prompt context smalle"
|
|
5
|
+
resource: "concepts/progressive-disclosure.md"
|
|
6
|
+
tags:
|
|
7
|
+
- "concepts"
|
|
8
|
+
- "progressive"
|
|
9
|
+
- "disclosure"
|
|
10
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
11
|
+
---
|
|
12
|
+
# Progressive Disclosure
|
|
13
|
+
|
|
14
|
+
Progressive disclosure means an agent starts with small previews and only loads full concept content when needed.
|
|
15
|
+
|
|
16
|
+
For okfy, the default pattern is:
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
search_concepts returns bounded previews
|
|
20
|
+
read_concept returns one concept
|
|
21
|
+
get_neighbors returns linked context
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
This keeps prompt context smaller than pasting full docs or loading an entire Markdown folder.
|
|
25
|
+
|
|
26
|
+
Related: [Serve Over MCP](../guides/serve-over-mcp.md).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "Documentation Page"
|
|
3
|
+
title: "Import Local Markdown"
|
|
4
|
+
description: "Use okfy import when docs already live in a local project checkout, wiki export, Obsidian vault, or staticsite source folder. Expected result: The importer preserves headings, code"
|
|
5
|
+
resource: "guides/import-local-markdown.md"
|
|
6
|
+
tags:
|
|
7
|
+
- "guides"
|
|
8
|
+
- "import"
|
|
9
|
+
- "local"
|
|
10
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
11
|
+
---
|
|
12
|
+
# Import Local Markdown
|
|
13
|
+
|
|
14
|
+
Use `okfy import` when docs already live in a local project checkout, wiki export, Obsidian vault, or static-site source folder.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx -y okfy-ai import ./examples/local-markdown --out ./tmp/okfy-docs --force
|
|
18
|
+
npx -y okfy-ai validate ./tmp/okfy-docs
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Expected result:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
Concepts: 6
|
|
25
|
+
Validation: valid
|
|
26
|
+
Broken links: 0
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The importer preserves headings, code blocks, and Markdown links. It infers tags from paths and headings, then writes one OKF concept per input file.
|
|
30
|
+
|
|
31
|
+
Next: [Serve Over MCP](./serve-over-mcp.md).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "Folder Index"
|
|
3
|
+
title: "Guides Index"
|
|
4
|
+
description: "Index for guides."
|
|
5
|
+
resource: "okfy docs"
|
|
6
|
+
tags:
|
|
7
|
+
- "index"
|
|
8
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Guides Index
|
|
12
|
+
|
|
13
|
+
- [import-local-markdown](./import-local-markdown.md)
|
|
14
|
+
- [serve-over-mcp](./serve-over-mcp.md)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "API Reference"
|
|
3
|
+
title: "Serve Over MCP"
|
|
4
|
+
description: "After generating an OKF bundle, serve it over stdio MCP: Agents should not read the whole bundle first. The efficient flow is: Use searchconcepts for discovery, readconcept for gro"
|
|
5
|
+
resource: "guides/serve-over-mcp.md"
|
|
6
|
+
tags:
|
|
7
|
+
- "guides"
|
|
8
|
+
- "serve"
|
|
9
|
+
- "over"
|
|
10
|
+
- "mcp"
|
|
11
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
12
|
+
---
|
|
13
|
+
# Serve Over MCP
|
|
14
|
+
|
|
15
|
+
After generating an OKF bundle, serve it over stdio MCP:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx -y okfy-ai serve ./tmp/okfy-docs --mcp
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Agents should not read the whole bundle first. The efficient flow is:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
bundle_summary -> search_concepts -> read_concept -> get_neighbors -> answer
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Use `search_concepts` for discovery, `read_concept` for grounded detail, and `get_neighbors` when linked concepts may change the answer.
|
|
28
|
+
|
|
29
|
+
See [MCP tools](../reference/mcp-tools.md) for tool descriptions.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "API Reference"
|
|
3
|
+
title: "okfy Local Markdown Fixture"
|
|
4
|
+
description: "This fixture models a small docs folder that can be imported into OKF without network access. Start with Import Local Markdown, then read Serve Over MCP. Key topics: OKF bundle str"
|
|
5
|
+
resource: "index.md"
|
|
6
|
+
tags:
|
|
7
|
+
- "okfy"
|
|
8
|
+
- "local"
|
|
9
|
+
- "fixture"
|
|
10
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
11
|
+
---
|
|
12
|
+
# okfy Local Markdown Fixture
|
|
13
|
+
|
|
14
|
+
This fixture models a small docs folder that can be imported into OKF without network access.
|
|
15
|
+
|
|
16
|
+
Start with [Import Local Markdown](./guides/import-local-markdown.md), then read [Serve Over MCP](./guides/serve-over-mcp.md).
|
|
17
|
+
|
|
18
|
+
Key topics:
|
|
19
|
+
|
|
20
|
+
- [OKF bundle structure](./concepts/okf-bundle.md)
|
|
21
|
+
- [Progressive disclosure](./concepts/progressive-disclosure.md)
|
|
22
|
+
- [MCP tools](./reference/mcp-tools.md)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sourceCommand": "pnpm okfy import examples/local-markdown --out examples/bundles/okfy-docs --source-name \"okfy docs\" --force --stable-timestamps",
|
|
3
|
+
"expectedConceptCount": 9,
|
|
4
|
+
"expectedValidationStatus": "valid",
|
|
5
|
+
"suggestedAgentQuestions": [
|
|
6
|
+
"Search okfy docs for crawler security defaults, then cite source concepts.",
|
|
7
|
+
"Read the MCP setup concept and explain the stdio config.",
|
|
8
|
+
"Find importer concepts and list supported input formats."
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "API Reference"
|
|
3
|
+
title: "MCP Tools"
|
|
4
|
+
description: "okfy exposes these readonly MCP tools: | Tool | Purpose | | | | | searchconcepts | Find concept previews by query, type, or tags. | | readconcept | Read one concept body, frontmatt"
|
|
5
|
+
resource: "reference/mcp-tools.md"
|
|
6
|
+
tags:
|
|
7
|
+
- "reference"
|
|
8
|
+
- "mcp"
|
|
9
|
+
- "tools"
|
|
10
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
11
|
+
---
|
|
12
|
+
# MCP Tools
|
|
13
|
+
|
|
14
|
+
okfy exposes these read-only MCP tools:
|
|
15
|
+
|
|
16
|
+
| Tool | Purpose |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| `search_concepts` | Find concept previews by query, type, or tags. |
|
|
19
|
+
| `read_concept` | Read one concept body, frontmatter, links, backlinks, and source resource. |
|
|
20
|
+
| `get_neighbors` | Traverse outbound links and backlinks around a concept. |
|
|
21
|
+
| `list_types` | Show concept types and counts. |
|
|
22
|
+
| `list_tags` | Show tags and counts. |
|
|
23
|
+
| `bundle_summary` | Show bundle title, concept count, type distribution, connected concepts, and validation status. |
|
|
24
|
+
|
|
25
|
+
Expected question-answer flow:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
bundle_summary
|
|
29
|
+
search_concepts
|
|
30
|
+
read_concept
|
|
31
|
+
get_neighbors
|
|
32
|
+
read_concept
|
|
33
|
+
answer with citations
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Related: [Progressive Disclosure](../concepts/progressive-disclosure.md).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "API Reference"
|
|
3
|
+
title: "Stripe Checkout"
|
|
4
|
+
description: "Checkout is a prebuilt payment form for accepting cards and other payment methods. This saved fixture mirrors the launch demo shape without requiring network access. Checkout quick"
|
|
5
|
+
resource: "index.html"
|
|
6
|
+
tags:
|
|
7
|
+
- "stripe"
|
|
8
|
+
- "checkout"
|
|
9
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
10
|
+
---
|
|
11
|
+
# Stripe Checkout
|
|
12
|
+
|
|
13
|
+
Checkout is a prebuilt payment form for accepting cards and other payment methods.
|
|
14
|
+
|
|
15
|
+
This saved fixture mirrors the launch demo shape without requiring network access.
|
|
16
|
+
|
|
17
|
+
- [Checkout quickstart](./quickstart.md)
|
|
18
|
+
- [Checkout Sessions API](./sessions.md)
|
|
19
|
+
- [Checkout webhooks](./webhooks.md)
|
|
20
|
+
|
|
21
|
+
Original source: [https://docs.stripe.com/checkout](https://docs.stripe.com/checkout)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sourceCommand": "pnpm okfy import test-fixtures/stripe-checkout-html --out examples/bundles/stripe-checkout-small --source-name \"Stripe Checkout sample\" --force --stable-timestamps",
|
|
3
|
+
"expectedConceptCount": 4,
|
|
4
|
+
"expectedValidationStatus": "valid",
|
|
5
|
+
"sampleNote": "Curated saved-HTML sample used when live crawling is flaky; source URLs are preserved in concept bodies and resource metadata points to the fixture source.",
|
|
6
|
+
"suggestedAgentQuestions": [
|
|
7
|
+
"Search for Checkout Sessions, read the strongest match, and explain required server parameters.",
|
|
8
|
+
"Find webhook-related concepts and summarize fulfillment safety notes.",
|
|
9
|
+
"Use neighbors to move from the quickstart to the API reference and webhook concepts."
|
|
10
|
+
]
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "API Reference"
|
|
3
|
+
title: "Checkout quickstart"
|
|
4
|
+
description: "Create a server endpoint that creates a Checkout Session, then redirect the customer to the session URL. See Checkout Sessions API and Checkout webhooks. Original source: https://d"
|
|
5
|
+
resource: "quickstart.html"
|
|
6
|
+
tags:
|
|
7
|
+
- "quickstart"
|
|
8
|
+
- "checkout"
|
|
9
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
10
|
+
---
|
|
11
|
+
# Checkout quickstart
|
|
12
|
+
|
|
13
|
+
Create a server endpoint that creates a Checkout Session, then redirect the customer to the session URL.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
const session = await stripe.checkout.sessions.create({
|
|
17
|
+
mode: "payment",
|
|
18
|
+
line_items: [{ price: "price_123", quantity: 1 }],
|
|
19
|
+
success_url: "https://example.com/success",
|
|
20
|
+
cancel_url: "https://example.com/cancel"
|
|
21
|
+
});
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
See [Checkout Sessions API](./sessions.md) and [Checkout webhooks](./webhooks.md).
|
|
25
|
+
|
|
26
|
+
Original source: [https://docs.stripe.com/checkout/quickstart](https://docs.stripe.com/checkout/quickstart)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "API Reference"
|
|
3
|
+
title: "Checkout Sessions API"
|
|
4
|
+
description: "A Checkout Session represents a customer's session as they pay for onetime purchases or subscriptions. Important parameters include mode, lineitems, successurl, and cancelurl. Star"
|
|
5
|
+
resource: "sessions.html"
|
|
6
|
+
tags:
|
|
7
|
+
- "sessions"
|
|
8
|
+
- "checkout"
|
|
9
|
+
- "api"
|
|
10
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
11
|
+
---
|
|
12
|
+
# Checkout Sessions API
|
|
13
|
+
|
|
14
|
+
A Checkout Session represents a customer's session as they pay for one-time purchases or subscriptions.
|
|
15
|
+
|
|
16
|
+
Important parameters include `mode`, `line_items`, `success_url`, and `cancel_url`.
|
|
17
|
+
|
|
18
|
+
Start with the [Checkout quickstart](./quickstart.md).
|
|
19
|
+
|
|
20
|
+
Original source: [https://docs.stripe.com/api/checkout/sessions](https://docs.stripe.com/api/checkout/sessions)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "API Reference"
|
|
3
|
+
title: "Checkout webhooks"
|
|
4
|
+
description: "Listen for checkout.session.completed before fulfilling orders or granting access. Webhook handlers should verify signatures and handle retries idempotently. Related: Checkout Sess"
|
|
5
|
+
resource: "webhooks.html"
|
|
6
|
+
tags:
|
|
7
|
+
- "webhooks"
|
|
8
|
+
- "checkout"
|
|
9
|
+
timestamp: "2026-06-14T00:00:00.000Z"
|
|
10
|
+
---
|
|
11
|
+
# Checkout webhooks
|
|
12
|
+
|
|
13
|
+
Listen for `checkout.session.completed` before fulfilling orders or granting access.
|
|
14
|
+
|
|
15
|
+
Webhook handlers should verify signatures and handle retries idempotently.
|
|
16
|
+
|
|
17
|
+
Related: [Checkout Sessions API](./sessions.md).
|
|
18
|
+
|
|
19
|
+
Original source: [https://docs.stripe.com/checkout/fulfillment](https://docs.stripe.com/checkout/fulfillment)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# OKF Bundle Structure
|
|
2
|
+
|
|
3
|
+
An Open Knowledge Format bundle is a directory of Markdown files with YAML frontmatter.
|
|
4
|
+
|
|
5
|
+
Minimum valid concept:
|
|
6
|
+
|
|
7
|
+
```md
|
|
8
|
+
---
|
|
9
|
+
type: Concept
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Concept title
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Useful generated fields include `title`, `description`, `resource`, `tags`, and `timestamp`.
|
|
16
|
+
|
|
17
|
+
okfy keeps output file-based so humans can inspect it, Git can diff it, and MCP clients can read only the concepts they need.
|
|
18
|
+
|
|
19
|
+
Related: [Progressive Disclosure](progressive-disclosure.md).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Progressive Disclosure
|
|
2
|
+
|
|
3
|
+
Progressive disclosure means an agent starts with small previews and only loads full concept content when needed.
|
|
4
|
+
|
|
5
|
+
For okfy, the default pattern is:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
search_concepts returns bounded previews
|
|
9
|
+
read_concept returns one concept
|
|
10
|
+
get_neighbors returns linked context
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This keeps prompt context smaller than pasting full docs or loading an entire Markdown folder.
|
|
14
|
+
|
|
15
|
+
Related: [Serve Over MCP](../guides/serve-over-mcp.md).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Import Local Markdown
|
|
2
|
+
|
|
3
|
+
Use `okfy import` when docs already live in a local project checkout, wiki export, Obsidian vault, or static-site source folder.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx -y okfy-ai import ./examples/local-markdown --out ./tmp/okfy-docs --force
|
|
7
|
+
npx -y okfy-ai validate ./tmp/okfy-docs
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Expected result:
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
Concepts: 6
|
|
14
|
+
Validation: valid
|
|
15
|
+
Broken links: 0
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The importer preserves headings, code blocks, and Markdown links. It infers tags from paths and headings, then writes one OKF concept per input file.
|
|
19
|
+
|
|
20
|
+
Next: [Serve Over MCP](serve-over-mcp.md).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Serve Over MCP
|
|
2
|
+
|
|
3
|
+
After generating an OKF bundle, serve it over stdio MCP:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx -y okfy-ai serve ./tmp/okfy-docs --mcp
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Agents should not read the whole bundle first. The efficient flow is:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
bundle_summary -> search_concepts -> read_concept -> get_neighbors -> answer
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Use `search_concepts` for discovery, `read_concept` for grounded detail, and `get_neighbors` when linked concepts may change the answer.
|
|
16
|
+
|
|
17
|
+
See [MCP tools](../reference/mcp-tools.md) for tool descriptions.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# okfy Local Markdown Fixture
|
|
2
|
+
|
|
3
|
+
This fixture models a small docs folder that can be imported into OKF without network access.
|
|
4
|
+
|
|
5
|
+
Start with [Import Local Markdown](guides/import-local-markdown.md), then read [Serve Over MCP](guides/serve-over-mcp.md).
|
|
6
|
+
|
|
7
|
+
Key topics:
|
|
8
|
+
|
|
9
|
+
- [OKF bundle structure](concepts/okf-bundle.md)
|
|
10
|
+
- [Progressive disclosure](concepts/progressive-disclosure.md)
|
|
11
|
+
- [MCP tools](reference/mcp-tools.md)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sourceCommand": "npx -y okfy-ai import ./examples/local-markdown --out ./tmp/okfy-docs --force --stable-timestamps",
|
|
3
|
+
"expectedConceptCount": 9,
|
|
4
|
+
"expectedValidationStatus": "valid",
|
|
5
|
+
"suggestedAgentQuestions": [
|
|
6
|
+
"Search for import workflow concepts, read the best match, and explain how to convert a local Markdown folder into OKF.",
|
|
7
|
+
"Find concepts tagged mcp, read the MCP tools concept, and describe the expected tool-call sequence.",
|
|
8
|
+
"Read the bundle summary, then identify which concepts are most useful for a first-time okfy user."
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# MCP Tools
|
|
2
|
+
|
|
3
|
+
okfy exposes these read-only MCP tools:
|
|
4
|
+
|
|
5
|
+
| Tool | Purpose |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| `search_concepts` | Find concept previews by query, type, or tags. |
|
|
8
|
+
| `read_concept` | Read one concept body, frontmatter, links, backlinks, and source resource. |
|
|
9
|
+
| `get_neighbors` | Traverse outbound links and backlinks around a concept. |
|
|
10
|
+
| `list_types` | Show concept types and counts. |
|
|
11
|
+
| `list_tags` | Show tags and counts. |
|
|
12
|
+
| `bundle_summary` | Show bundle title, concept count, type distribution, connected concepts, and validation status. |
|
|
13
|
+
|
|
14
|
+
Expected question-answer flow:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
bundle_summary
|
|
18
|
+
search_concepts
|
|
19
|
+
read_concept
|
|
20
|
+
get_neighbors
|
|
21
|
+
read_concept
|
|
22
|
+
answer with citations
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Related: [Progressive Disclosure](../concepts/progressive-disclosure.md).
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "okfy-ai",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Convert docs into Open Knowledge Format bundles and serve them to MCP agents.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"okfy": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE",
|
|
13
|
+
"assets/logo.svg",
|
|
14
|
+
"assets/demo.gif",
|
|
15
|
+
"docs/mcp-clients.md",
|
|
16
|
+
"examples"
|
|
17
|
+
],
|
|
18
|
+
"keywords": [
|
|
19
|
+
"okf",
|
|
20
|
+
"open-knowledge-format",
|
|
21
|
+
"mcp",
|
|
22
|
+
"agent-memory",
|
|
23
|
+
"llm",
|
|
24
|
+
"docs",
|
|
25
|
+
"rag",
|
|
26
|
+
"markdown"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsup src/cli.ts src/index.ts --format esm --dts --clean",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"typecheck": "tsc --noEmit",
|
|
35
|
+
"lint": "eslint .",
|
|
36
|
+
"format": "prettier --write .",
|
|
37
|
+
"okfy": "node dist/cli.js",
|
|
38
|
+
"demo": "node dist/cli.js demo",
|
|
39
|
+
"publish:npm": "node scripts/publish-npm-readme.mjs",
|
|
40
|
+
"prepublishOnly": "pnpm build && pnpm test && pnpm typecheck"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@modelcontextprotocol/sdk": "^1.13.3",
|
|
44
|
+
"cheerio": "^1.0.0",
|
|
45
|
+
"commander": "^12.1.0",
|
|
46
|
+
"gray-matter": "^4.0.3",
|
|
47
|
+
"minimatch": "^10.0.1",
|
|
48
|
+
"minisearch": "^7.1.2",
|
|
49
|
+
"p-limit": "^6.2.0",
|
|
50
|
+
"picocolors": "^1.1.1",
|
|
51
|
+
"robots-parser": "^3.0.1",
|
|
52
|
+
"turndown": "^7.2.0",
|
|
53
|
+
"zod": "^3.25.64"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@eslint/js": "^9.29.0",
|
|
57
|
+
"@types/node": "^20.19.1",
|
|
58
|
+
"@types/turndown": "^5.0.5",
|
|
59
|
+
"eslint": "^9.29.0",
|
|
60
|
+
"prettier": "^3.5.3",
|
|
61
|
+
"tsup": "^8.5.0",
|
|
62
|
+
"typescript": "^5.8.3",
|
|
63
|
+
"typescript-eslint": "^8.34.1",
|
|
64
|
+
"vitest": "^3.2.4"
|
|
65
|
+
},
|
|
66
|
+
"repository": {
|
|
67
|
+
"type": "git",
|
|
68
|
+
"url": "git+https://github.com/0dust/OKFy.git"
|
|
69
|
+
},
|
|
70
|
+
"license": "MIT"
|
|
71
|
+
}
|