Opentology
No description available
Ask AI about Opentology
Powered by Claude Β· Grounded in docs
I know everything about Opentology. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
OpenTology
Ontology-powered project memory for AI coding assistants β your codebase as a knowledge graph
English
Most MCP servers give AI assistants tools. OpenTology gives them understanding.
When you connect OpenTology to Claude Code (or any MCP client), it doesn't just expose SPARQL queries β it builds a persistent knowledge graph of your project: module dependencies, architectural decisions, resolved bugs, session history, and code-level symbols. Then it automatically instructs the AI to check impact before editing, search past decisions before choosing, and record what it learns.
The result: an AI assistant that remembers across sessions, understands your codebase structure, and thinks before it acts.
See the live knowledge graph at opentology.dev β OpenTology scanning its own codebase: 67 modules, 234 call relations, fully interactive.
How It Works
npm install -g opentology # 1. Install
opentology context init # 2. Initialize (creates graph + hooks + CLAUDE.md instructions)
opentology context scan # 3. Scan codebase into the knowledge graph
# 4. Done β AI now uses the graph automatically
After setup, every session follows this cycle:
ββββββββββββ Session Start ββββββββββββ
β SessionStart hook β
β β context_sync (auto-recover β
β missed sessions, rescan modules) β
β β
β "Edit src/lib/reasoner.ts" β
β β context_impact (blast radius) β
β β "5 dependents, impact: high" β
β β Confirms with user, then edits β
β β
β Encounters a bug β
β β query (search past issues) β
β β Finds similar resolved issue β
β β
β Makes architecture decision β
β β push (records Decision) β
β β
β Session End β
β β push (records Session summary) β
βββββββββββββββββββββββββββββββββββββββ
What Makes This Different
| Typical MCP | OpenTology | |
|---|---|---|
| Provides | Tools only | Tools + behavioral instructions + auto-sync hooks |
| AI behavior | User must prompt correctly | AI proactively checks impact, searches context |
| Memory | Resets every session | Persistent knowledge graph across sessions |
| Codebase awareness | None | Module dependencies, symbols, call graphs |
| Setup | Manual per-project config | One command (context init) |
OpenTology doesn't just add capabilities β it shapes how the AI works on your project.
Why Graph over grep?
We ran a real experiment on this codebase: the same question answered with grep vs the knowledge graph.
Q: "What breaks if I change store-adapter.ts?"
| grep / ripgrep | OpenTology | |
|---|---|---|
| Calls needed | 6 (direct imports + 2nd-level deps + test files) | 1 (context_impact) |
| Files found | 7 (missed dead-code dependents) | 9 (complete, including dead code) |
| Impact severity | Not available | HIGH β returned automatically |
| Manual work | Trace each import, search consumers, assemble the list yourself | None β one call returns the full picture |
# grep: 6 separate searches to assemble the dependency chain
$ rg "import.*store-adapter" src/ # Step 1: direct imports (7 files)
$ rg "import.*store-factory" src/ # Step 2: who imports those?
$ rg "import.*reasoner" src/ # Step 3: ...and those?
$ rg "import.*visualizer" src/ # Step 4
$ rg "import.*embedded-adapter" src/ # Step 5
$ rg "store-adapter|store-factory" tests/ # Step 6: test files
# OpenTology: 1 call
$ opentology context impact src/lib/store-adapter.ts
# β Impact: HIGH | 9 dependents | 0 dependencies
Q: "How does embedded-adapter reach reasoner?"
| grep | OpenTology | |
|---|---|---|
| Calls needed | 4 + manual code reading | 1 SPARQL query |
| Result | Manual path assembly: adapter -> store-factory -> reasoner | Transitive closure (dependsOn+) returns all paths |
| Bonus | None | Returns all 14 modules that reach reasoner, including indirect paths |
# One query finds all transitive paths
SELECT ?from ?to WHERE {
?from otx:dependsOn+ ?to .
FILTER(?to = <urn:module:src/lib/reasoner>)
}
# Returns all 14 modules that reach reasoner, including indirect paths
See the interactive comparison at opentology.dev β switch between Impact Analysis and Call Path Tracing scenarios.
The Knowledge Graph
Everything lives in RDF named graphs with the otx: ontology:
context graph sessions graph
βββ otx:Module (source files) βββ otx:Session (work logs)
β βββ otx:dependsOn βββ otx:hasActivity β otx:Activity
βββ otx:Class / otx:Interface βββ otx:Todo (open β done)
β βββ otx:Method / otx:Function βββ otx:Insight (patterns learned)
βββ otx:Decision (architecture choices) βββ otx:Domain (work area tags)
βββ otx:Issue (bugs, status tracking) βββ otx:followsUp (session chaining)
βββ otx:Knowledge (reusable patterns)
Query anything with SPARQL:
# What depends on this module?
SELECT ?dep WHERE { ?dep otx:dependsOn <urn:module:src/lib/reasoner> }
# What decisions were made about auth?
SELECT ?title ?reason WHERE {
?d a otx:Decision ; otx:title ?title ; otx:reason ?reason
FILTER(CONTAINS(LCASE(?title), "auth"))
}
# What did we do last session?
SELECT ?title ?body ?next WHERE {
?s a otx:Session ; otx:title ?title ; otx:date ?date ; otx:body ?body
OPTIONAL { ?s otx:nextTodo ?next }
} ORDER BY DESC(?date) LIMIT 1
Quick Start
1. Add to your MCP client
{
"mcpServers": {
"opentology": {
"command": "npx",
"args": ["-y", "opentology", "mcp"]
}
}
}
2. Initialize project context
Ask your AI assistant to run context_init, or from the CLI:
opentology context init
This creates:
.opentology.jsonβ project config- Context and sessions named graphs
- SessionStart hook for auto-sync
- CLAUDE.md instructions (impact checks, graph queries, session recording)
3. Scan your codebase
opentology context scan
Builds the module dependency graph. For deeper analysis:
{ "depth": "symbol", "includeMethodCalls": true }
4. Work normally
The AI now automatically:
- Checks
context_impactbefore editing files - Searches decisions/issues/knowledge when relevant
- Records session summaries at the end
Codebase Scanning
| Depth | What it extracts | Use case |
|---|---|---|
module (default) | File-level import graph | Impact analysis, dependency tracking |
symbol | Classes, interfaces, functions, methods, call graphs | Deep code understanding |
Supported languages for symbol-level scan:
| Language | Engine |
|---|---|
| TypeScript/JavaScript | ts-morph |
| Python | Tree-sitter |
| Go | Tree-sitter |
| Rust | Tree-sitter |
| Java | Tree-sitter |
| Swift | Tree-sitter |
Optional dependencies for symbol scan:
npm install ts-morph # TypeScript/JavaScript
npm install web-tree-sitter tree-sitter-wasms # Python, Go, Rust, Java, Swift
RDF Infrastructure
Under the hood, OpenTology is a full RDF/SPARQL toolkit:
- RDFS reasoning β push data, get automatic inference (subClassOf, domain, range)
- SHACL validation β shape constraints checked on every push
- Two storage modes β embedded (WASM, zero Docker) or HTTP (Oxigraph server)
- Interactive visualization β web UI for exploring the graph (
opentology context graph) - Named graph scoping β queries auto-scope to your project
# Push RDF data with auto-inference
opentology push ontology.ttl
# Query with auto-prefixed SPARQL
opentology query 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 10'
# Visualize schema
opentology viz schema
# Health check
opentology doctor
CLI Commands
| Command | Description |
|---|---|
context init | Initialize project context (graphs + hooks + CLAUDE.md) |
context scan | Scan codebase into knowledge graph |
context load | Load recent sessions, open issues, decisions |
context impact | Analyze blast radius of a file change |
context sync | Auto-recover sessions from git, rescan modules |
context graph | Start interactive visualization web UI |
init | Initialize RDF project |
push | Push triples with SHACL validation + RDFS inference |
query | Execute SPARQL queries |
validate | Validate Turtle syntax and SHACL shapes |
pull | Export graph as Turtle |
diff | Compare local file vs graph |
delete | Delete triples by file or pattern |
drop | Drop entire graph |
infer | Run/clear RDFS materialization |
graph | Manage named graphs |
status | Show triple counts |
doctor | Diagnose project health |
mcp | Start MCP server |
MCP Tools (23)
| Tool | Description |
|---|---|
context_init | Initialize project context graph |
context_load | Load project context (sessions, issues, decisions) |
context_scan | Scan codebase (module or symbol-level) |
context_impact | Analyze file modification impact |
context_sync | Auto-sync from git history |
context_status | Check context initialization status |
context_graph | Start interactive graph visualization |
init | Initialize RDF project |
push | Validate and push triples |
query | Execute SPARQL queries |
validate | Validate Turtle content |
pull | Export graph as Turtle |
drop | Drop project graph |
delete | Delete triples |
diff | Compare local vs graph |
schema | Introspect ontology schema |
infer | Run RDFS inference |
graph_list | List named graphs |
graph_create | Create named graph |
graph_drop | Drop named graph |
visualize | Generate schema diagram (Mermaid/DOT) |
status | Get project status |
doctor | Check project health |
System Requirements
- Node.js >= 20.0.0
- oxigraph uses WebAssembly β runs everywhere Node.js runs, no native build tools needed
Tech Stack
- TypeScript, Oxigraph WASM, N3.js, commander.js
- @modelcontextprotocol/sdk for MCP server
- shacl-engine for SHACL validation
- ts-morph (optional) for TypeScript symbol analysis
- web-tree-sitter + tree-sitter-wasms (optional) for multi-language analysis
Roadmap
- Full RDF lifecycle CLI (18 commands)
- MCP server (23 tools + 1 resource)
- RDFS reasoning with auto-materialization
- SHACL validation
- Embedded mode (zero Docker)
- Project context graph (decisions, issues, sessions)
- Codebase scanning (module + symbol level, 6 languages)
- Impact analysis with dependency tracking
- Auto-sync from git history
- AI behavioral instructions via CLAUDE.md injection
- Interactive graph visualization web UI
- Structured session schema (Activity, Todo, Insight, Domain) with proactive save
- OWL reasoning (owl:sameAs, owl:inverseOf)
- Remote ontology import
- Ontology snapshot versioning
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes
- Open a Pull Request
License
MIT
νκ΅μ΄
λλΆλΆμ MCP μλ²λ AIμκ² λꡬλ₯Ό μ€λλ€. OpenTologyλ AIμκ² μ΄ν΄λ₯Ό μ€λλ€.
OpenTologyλ₯Ό Claude Code(λλ MCP νΈν ν΄λΌμ΄μΈνΈ)μ μ°κ²°νλ©΄, λ¨μν SPARQL 쿼리λ₯Ό λ ΈμΆνλ κ²μ΄ μλλΌ νλ‘μ νΈμ μμμ μΈ μ§μ κ·Έλνλ₯Ό ꡬμΆν©λλ€: λͺ¨λ μμ‘΄μ±, μν€ν μ² μμ¬κ²°μ , ν΄κ²°λ λ²κ·Έ, μΈμ μ΄λ ₯, μ½λ μμ€μ μ¬λ³ΌκΉμ§. κ·Έλ¦¬κ³ AIκ° μλμΌλ‘ νΈμ§ μ μ μν₯λλ₯Ό νμΈνκ³ , μμ¬κ²°μ μ μ κ³Όκ±° κΈ°λ‘μ κ²μνκ³ , λ°°μ΄ κ²μ κΈ°λ‘νλλ‘ μ§μΉ¨μ μ£Όμ ν©λλ€.
κ²°κ³Ό: μΈμ μ λμ΄ κΈ°μ΅νκ³ , μ½λλ² μ΄μ€ ꡬ쑰λ₯Ό μ΄ν΄νλ©°, νλ μ μ μκ°νλ AI μ΄μμ€ν΄νΈ.
opentology.devμμ λΌμ΄λΈ μ§μ κ·Έλν νμΈ β OpenTologyκ° μκΈ° μμ μ μ½λλ² μ΄μ€λ₯Ό μ€μΊν κ²°κ³Ό: 67κ° λͺ¨λ, 234κ° νΈμΆ κ΄κ³, μΈν°λν°λΈ νμ κ°λ₯.
μλ λ°©μ
npm install -g opentology # 1. μ€μΉ
opentology context init # 2. μ΄κΈ°ν (κ·Έλν + ν
+ CLAUDE.md μ§μΉ¨ μμ±)
opentology context scan # 3. μ½λλ² μ΄μ€λ₯Ό μ§μ κ·Έλνλ‘ μ€μΊ
# 4. λ β AIκ° μλμΌλ‘ κ·Έλνλ₯Ό νμ©
μ€μ ν λ§€ μΈμ μ μ΄ μ¬μ΄ν΄μ λ°λ¦ λλ€:
ββββββββββββ μΈμ
μμ ββββββββββββββββ
β SessionStart ν
β
β β context_sync (λμΉ μΈμ
볡ꡬ, β
β λͺ¨λ κ·Έλν κ°±μ ) β
β β
β "src/lib/reasoner.ts μμ ν΄μ€" β
β β context_impact (νλ° λ°κ²½ νμΈ) β
β β "5κ° μμ‘΄ λͺ¨λ, impact: high" β
β β μ μ νμΈ ν μμ β
β β
β λ²κ·Έ λ°μ β
β β query (κ³Όκ±° μ΄μ κ²μ) β
β β μ μ¬ν ν΄κ²° μ΄μ λ°κ²¬ β
β β
β μν€ν
μ² μμ¬κ²°μ β
β β push (Decision κΈ°λ‘) β
β β
β μΈμ
μ’
λ£ β
β β push (Session μμ½ κΈ°λ‘) β
βββββββββββββββββββββββββββββββββββββββ
무μμ΄ λ€λ₯Έκ°
| μΌλ° MCP | OpenTology | |
|---|---|---|
| μ 곡νλ κ² | λκ΅¬λ§ | λꡬ + νλ μ§μΉ¨ + μλ λκΈ°ν ν |
| AI νλ | μ μ κ° μ νν ν둬ννΈν΄μΌ ν¨ | AIκ° μλ°μ μΌλ‘ μν₯λ νμΈ, 컨ν μ€νΈ κ²μ |
| λ©λͺ¨λ¦¬ | λ§€ μΈμ 리μ | μΈμ μ λμ΄ μμνλ μ§μ κ·Έλν |
| μ½λλ² μ΄μ€ μΈμ | μμ | λͺ¨λ μμ‘΄μ±, μ¬λ³Ό, νΈμΆ κ·Έλν |
| μ€μ | νλ‘μ νΈλ§λ€ μλ μ€μ | λͺ
λ Ήμ΄ νλ (context init) |
OpenTologyλ κΈ°λ₯λ§ μΆκ°νλ κ²μ΄ μλλΌ, AIκ° νλ‘μ νΈμμ μΌνλ λ°©μ μ체λ₯Ό λ°κΏλλ€.
μ grep λμ κ·ΈλνμΈκ°?
μ΄ μ½λλ² μ΄μ€μμ μ€μ μ€νμ νμ΅λλ€: κ°μ μ§λ¬Έμ grepκ³Ό μ§μ κ·Έλνλ‘ κ°κ° λ΅ν΄ λ΄€μ΅λλ€.
Q: "store-adapter.tsλ₯Ό λ°κΎΈλ©΄ λκ° κΉ¨μ§λ?"
| grep / ripgrep | OpenTology | |
|---|---|---|
| νμν νΈμΆ μ | 6λ² (μ§μ import + 2μ°¨ μμ‘΄ μΆμ + ν μ€νΈ νμΌ) | 1λ² (context_impact) |
| λ°κ²¬ν νμΌ μ | 7κ° (dead code μμ‘΄μ± λλ½) | 9κ° (dead code ν¬ν¨ μμ ν κ²°κ³Ό) |
| μν₯λ μμ€ | μ 곡 μ λ¨ | HIGH β μλ λ°ν |
| μμμ | κ° importλ₯Ό μΆμ νκ³ , μλΉμλ₯Ό κ²μνκ³ , μ§μ λͺ©λ‘ μ‘°ν© | μμ β ν λ²μ νΈμΆλ‘ μ 체 κ·Έλ¦Ό |
# grep: μμ‘΄μ± μ²΄μΈ μ‘°ν©μ 6λ²μ κ²μ
$ rg "import.*store-adapter" src/ # 1λ¨κ³: μ§μ import (7κ° νμΌ)
$ rg "import.*store-factory" src/ # 2λ¨κ³: κ·Έκ±Έ λκ° import?
$ rg "import.*reasoner" src/ # 3λ¨κ³: ...κ·Έλ¦¬κ³ κ·Έκ±Έ?
$ rg "import.*visualizer" src/ # 4λ¨κ³
$ rg "import.*embedded-adapter" src/ # 5λ¨κ³
$ rg "store-adapter|store-factory" tests/ # 6λ¨κ³: ν
μ€νΈ νμΌ
# OpenTology: 1λ²μ νΈμΆ
$ opentology context impact src/lib/store-adapter.ts
# β Impact: HIGH | 9κ° μμ‘΄ λͺ¨λ | 0κ° μ’
μμ±
Q: "embedded-adapterμμ reasonerκΉμ§ μ΄λ»κ² μ°κ²°λλ?"
| grep | OpenTology | |
|---|---|---|
| νμν νΈμΆ μ | 4λ² + μ½λ μ§μ μ½κΈ° | 1λ² SPARQL 쿼리 |
| κ²°κ³Ό | μλ κ²½λ‘ μ‘°ν©: adapter β store-factory β reasoner | μ μ΄ νν¬(dependsOn+)λ‘ λͺ¨λ κ²½λ‘ λ°ν |
| μΆκ° λ°κ²¬ | μμ | reasonerμ μ μ΄μ μΌλ‘ μμ‘΄νλ 14κ° λͺ¨λ μ 체 λͺ©λ‘ |
-- ν λ²μ μΏΌλ¦¬λ‘ λͺ¨λ μ μ΄ κ²½λ‘ λ°κ²¬
SELECT ?from ?to WHERE {
?from otx:dependsOn+ ?to .
FILTER(?to = <urn:module:src/lib/reasoner>)
}
-- κ°μ κ²½λ‘μΈ embedded-adapter ν¬ν¨ 14κ° λͺ¨λ λ°ν
opentology.devμμ μΈν°λν°λΈ λΉκ΅ 보기 β Impact Analysisμ Call Path Tracing μλ리μ€λ₯Ό μ νν΄ λ³΄μΈμ.
μ§μ κ·Έλν ꡬ쑰
λͺ¨λ λ°μ΄ν°λ otx: μ¨ν¨λ‘μ§λ₯Ό μ¬μ©νλ RDF named graphμ μ μ₯λ©λλ€:
context graph sessions graph
βββ otx:Module (μμ€ νμΌ) βββ otx:Session (μμ
λ‘κ·Έ)
β βββ otx:dependsOn βββ otx:hasActivity β otx:Activity
βββ otx:Class / otx:Interface βββ otx:Todo (open β done)
β βββ otx:Method / otx:Function βββ otx:Insight (νμ΅λ ν¨ν΄)
βββ otx:Decision (μν€ν
μ² μμ¬κ²°μ ) βββ otx:Domain (μμ
μμ νκ·Έ)
βββ otx:Issue (λ²κ·Έ, μν μΆμ ) βββ otx:followsUp (μΈμ
체μ΄λ)
βββ otx:Knowledge (μ¬μ¬μ© κ°λ₯ν ν¨ν΄)
SPARQLλ‘ λ¬΄μμ΄λ 쿼리 κ°λ₯:
# μ΄ λͺ¨λμ μμ‘΄νλ κ²μ?
SELECT ?dep WHERE { ?dep otx:dependsOn <urn:module:src/lib/reasoner> }
# μΈμ¦ κ΄λ ¨ μμ¬κ²°μ μ?
SELECT ?title ?reason WHERE {
?d a otx:Decision ; otx:title ?title ; otx:reason ?reason
FILTER(CONTAINS(LCASE(?title), "auth"))
}
# μ§λ μΈμ
μμ λ νμ§?
SELECT ?title ?body ?next WHERE {
?s a otx:Session ; otx:title ?title ; otx:date ?date ; otx:body ?body
OPTIONAL { ?s otx:nextTodo ?next }
} ORDER BY DESC(?date) LIMIT 1
λΉ λ₯Έ μμ
1. MCP ν΄λΌμ΄μΈνΈμ μΆκ°
{
"mcpServers": {
"opentology": {
"command": "npx",
"args": ["-y", "opentology", "mcp"]
}
}
}
2. νλ‘μ νΈ μ»¨ν μ€νΈ μ΄κΈ°ν
AI μ΄μμ€ν΄νΈμκ² context_init μ€νμ μμ²νκ±°λ, CLIμμ:
opentology context init
μμ±λλ κ²:
.opentology.jsonβ νλ‘μ νΈ μ€μ - context / sessions named graph
- SessionStart ν (μλ λκΈ°ν)
- CLAUDE.md μ§μΉ¨ (μν₯λ νμΈ, κ·Έλν 쿼리, μΈμ κΈ°λ‘)
3. μ½λλ² μ΄μ€ μ€μΊ
opentology context scan
λͺ¨λ μμ‘΄μ± κ·Έλνλ₯Ό ꡬμΆν©λλ€. μ¬λ³Ό μμ€ λΆμ:
{ "depth": "symbol", "includeMethodCalls": true }
4. νμμ²λΌ μμ
AIκ° μλμΌλ‘:
- νμΌ μμ μ
context_impactλ‘ μν₯λ νμΈ - κ΄λ ¨ μμ¬κ²°μ /μ΄μ/μ§μ κ²μ
- μΈμ μ’ λ£ μ μμ μμ½ κΈ°λ‘
μ½λλ² μ΄μ€ μ€μΊ
| κΉμ΄ | μΆμΆ λ΄μ© | μ©λ |
|---|---|---|
module (κΈ°λ³Έ) | νμΌ μμ€ import κ·Έλν | μν₯λ λΆμ, μμ‘΄μ± μΆμ |
symbol | ν΄λμ€, μΈν°νμ΄μ€, ν¨μ, λ©μλ, νΈμΆ κ·Έλν | μ¬μΈ΅ μ½λ μ΄ν΄ |
μ¬λ³Ό μ€μΊ μ§μ μΈμ΄:
| μΈμ΄ | μμ§ |
|---|---|
| TypeScript/JavaScript | ts-morph |
| Python | Tree-sitter |
| Go | Tree-sitter |
| Rust | Tree-sitter |
| Java | Tree-sitter |
| Swift | Tree-sitter |
μ¬λ³Ό μ€μΊ μ νμ μμ‘΄μ±:
npm install ts-morph # TypeScript/JavaScript
npm install web-tree-sitter tree-sitter-wasms # Python, Go, Rust, Java, Swift
RDF μΈνλΌ
λ΄λΆμ μΌλ‘ OpenTologyλ μμ ν RDF/SPARQL ν΄ν·μ λλ€:
- RDFS μΆλ‘ β λ°μ΄ν° νΈμ μ μλ μΆλ‘ (subClassOf, domain, range)
- SHACL κ²μ¦ β νΈμλ§λ€ νμ μ μ½ μλ κ²μ¦
- λ κ°μ§ μ€ν λ¦¬μ§ λͺ¨λ β μλ² λλ (WASM, Docker λΆνμ) λλ HTTP (Oxigraph μλ²)
- μΈν°λν°λΈ μκ°ν β κ·Έλν νμ μΉ UI (
opentology context graph) - Named graph μ€μ½ν β μΏΌλ¦¬κ° νλ‘μ νΈμ μλ νμ
# RDFS μΆλ‘ ν¬ν¨ λ°μ΄ν° νΈμ
opentology push ontology.ttl
# μ λμ¬ μλ μ½μ
SPARQL 쿼리
opentology query 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 10'
# μ€ν€λ§ μκ°ν
opentology viz schema
# κ±΄κ° μ§λ¨
opentology doctor
CLI λͺ λ Ήμ΄
| λͺ λ Ήμ΄ | μ€λͺ |
|---|---|
context init | νλ‘μ νΈ μ»¨ν μ€νΈ μ΄κΈ°ν (κ·Έλν + ν + CLAUDE.md) |
context scan | μ½λλ² μ΄μ€λ₯Ό μ§μ κ·Έλνλ‘ μ€μΊ |
context load | μ΅κ·Ό μΈμ , λ―Έν΄κ²° μ΄μ, μμ¬κ²°μ λ‘λ |
context impact | νμΌ λ³κ²½μ νλ° λ°κ²½ λΆμ |
context sync | git μ΄λ ₯μμ μΈμ 볡ꡬ, λͺ¨λ μ¬μ€μΊ |
context graph | μΈν°λν°λΈ μκ°ν μΉ UI μμ |
init | RDF νλ‘μ νΈ μ΄κΈ°ν |
push | SHACL κ²μ¦ + RDFS μΆλ‘ ν¬ν¨ νΈλ¦¬ν νΈμ |
query | SPARQL 쿼리 μ€ν |
validate | Turtle λ¬Έλ² λ° SHACL κ²μ¦ |
pull | κ·Έλνλ₯Ό Turtleλ‘ λ΄λ³΄λ΄κΈ° |
diff | λ‘컬 νμΌκ³Ό κ·Έλν λΉκ΅ |
delete | νμΌ/ν¨ν΄μΌλ‘ νΈλ¦¬ν μμ |
drop | κ·Έλν μ 체 μμ |
infer | RDFS λ¬Όμ§ν μ€ν/μ 리 |
graph | Named graph κ΄λ¦¬ |
status | νΈλ¦¬ν μ νμ |
doctor | νλ‘μ νΈ κ±΄κ° μ§λ¨ |
mcp | MCP μλ² μμ |
MCP λꡬ (23κ°)
| λꡬ | μ€λͺ |
|---|---|
context_init | νλ‘μ νΈ μ»¨ν μ€νΈ κ·Έλν μ΄κΈ°ν |
context_load | νλ‘μ νΈ μ»¨ν μ€νΈ λ‘λ (μΈμ , μ΄μ, μμ¬κ²°μ ) |
context_scan | μ½λλ² μ΄μ€ μ€μΊ (λͺ¨λ/μ¬λ³Ό μμ€) |
context_impact | νμΌ μμ μν₯λ λΆμ |
context_sync | git μ΄λ ₯μμ μλ λκΈ°ν |
context_status | 컨ν μ€νΈ μ΄κΈ°ν μν νμΈ |
context_graph | μΈν°λν°λΈ κ·Έλν μκ°ν μμ |
init | RDF νλ‘μ νΈ μ΄κΈ°ν |
push | νΈλ¦¬ν κ²μ¦ λ° νΈμ |
query | SPARQL 쿼리 μ€ν |
validate | Turtle λ΄μ© κ²μ¦ |
pull | κ·Έλνλ₯Ό Turtleλ‘ λ΄λ³΄λ΄κΈ° |
drop | νλ‘μ νΈ κ·Έλν μμ |
delete | νΈλ¦¬ν μμ |
diff | λ‘컬 νμΌκ³Ό κ·Έλν λΉκ΅ |
schema | μ¨ν¨λ‘μ§ μ€ν€λ§ μ‘°ν |
infer | RDFS μΆλ‘ μ€ν |
graph_list | Named graph λͺ©λ‘ |
graph_create | Named graph μμ± |
graph_drop | Named graph μμ |
visualize | μ€ν€λ§ λ€μ΄μ΄κ·Έλ¨ μμ± (Mermaid/DOT) |
status | νλ‘μ νΈ μν μ‘°ν |
doctor | νλ‘μ νΈ κ±΄κ° μ§λ¨ |
μμ€ν μꡬμ¬ν
- Node.js >= 20.0.0
- oxigraphλ WebAssemblyλ₯Ό μ¬μ©νλ―λ‘ Node.jsκ° μ€νλλ λͺ¨λ νκ²½μμ λμν©λλ€
κΈ°μ μ€ν
- TypeScript, Oxigraph WASM, N3.js, commander.js
- @modelcontextprotocol/sdk (MCP μλ²)
- shacl-engine (SHACL κ²μ¦)
- ts-morph (μ ν) TypeScript μ¬λ³Ό λΆμ
- web-tree-sitter + tree-sitter-wasms (μ ν) λ€μ€ μΈμ΄ λΆμ
λ‘λλ§΅
- μ 체 RDF μμ μ£ΌκΈ° CLI (18κ° λͺ λ Ήμ΄)
- MCP μλ² (23κ° λꡬ + 1κ° λ¦¬μμ€)
- RDFS μΆλ‘ (μλ λ¬Όμ§ν)
- SHACL κ²μ¦
- μλ² λλ λͺ¨λ (Docker λΆνμ)
- νλ‘μ νΈ μ»¨ν μ€νΈ κ·Έλν (μμ¬κ²°μ , μ΄μ, μΈμ )
- μ½λλ² μ΄μ€ μ€μΊ (λͺ¨λ + μ¬λ³Ό μμ€, 6κ° μΈμ΄)
- μμ‘΄μ± μΆμ κΈ°λ° μν₯λ λΆμ
- git μ΄λ ₯μμ μλ λκΈ°ν
- CLAUDE.md μ£Όμ μ ν΅ν AI νλ μ§μΉ¨
- μΈν°λν°λΈ κ·Έλν μκ°ν μΉ UI
- ꡬ쑰νλ μΈμ μ€ν€λ§ (Activity, Todo, Insight, Domain) + νλ‘μ‘ν°λΈ μ μ₯
- OWL μΆλ‘ (owl:sameAs, owl:inverseOf)
- μ격 μ¨ν¨λ‘μ§ μν¬νΈ
- μ¨ν¨λ‘μ§ μ€λ μ· λ²μ κ΄λ¦¬
κΈ°μ¬ λ°©λ²
- μ μ₯μλ₯Ό ν¬ν¬ν©λλ€
- κΈ°λ₯ λΈλμΉλ₯Ό λ§λλλ€ (
git checkout -b feature/my-feature) - λ³κ²½μ¬νμ 컀λ°ν©λλ€
- Pull Requestλ₯Ό μ΄μ΄μ£ΌμΈμ
λΌμ΄μ μ€
MIT
