tekneh 0.1.0__tar.gz

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.
@@ -0,0 +1,23 @@
1
+ # Nested sibling checkouts (own remotes)
2
+ /tekneh_web/
3
+ /tekneh_research/
4
+ /meta_artpaper_paper/
5
+ /mid/
6
+ # Site deploy wrapper (lives with tekneh_web; not part of the PyPI package)
7
+ /deploy.sh
8
+ # Local export accidents
9
+ /tekneh-public/
10
+ /tekneh-pkg/
11
+ # sync.sh copies (source of truth: tekneh_research)
12
+ /src/tekneh_mcp/data/
13
+ /src/tekneh_mcp/query.py
14
+ # Tooling / build
15
+ .venv/
16
+ dist/
17
+ *.egg-info/
18
+ __pycache__/
19
+ *.pyc
20
+ .env
21
+ .env.*
22
+ !.env.example
23
+ *.PNG
tekneh-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,125 @@
1
+ Metadata-Version: 2.5
2
+ Name: tekneh
3
+ Version: 0.1.0
4
+ Summary: SIGGRAPH and SIGGRAPH Asia art-paper technē corpus — what papers state about making media art, and what they leave unstated
5
+ Project-URL: Homepage, https://tekneh.com
6
+ Project-URL: Repository, https://github.com/joonhyungbae/tekneh
7
+ Project-URL: Documentation, https://tekneh.com/about.html
8
+ Author-email: Joonhyung Bae <jh.bae@kaist.ac.kr>
9
+ License: CC-BY-4.0
10
+ Requires-Python: >=3.10
11
+ Requires-Dist: mcp>=1.2.0
12
+ Description-Content-Type: text/markdown
13
+
14
+ # Tekneh MCP
15
+
16
+ An MCP server for asking what SIGGRAPH and SIGGRAPH Asia art papers **wrote — and did not write — about implementation**.
17
+
18
+ It ships a corpus of 229 work papers (2009–2026) fully coded on 11 implementation fields.
19
+ Data is bundled in the package, so **no server and no network are required.** CSV is 566KB; it starts instantly.
20
+
21
+ ## Install — any MCP client
22
+
23
+ MCP is an open protocol. **This server is not tied to any one vendor’s product.** It speaks standard JSON-RPC over stdio, so any MCP-capable client can attach. Most use the block below as-is.
24
+
25
+ ```json
26
+ { "mcpServers": { "tekneh": { "command": "uvx", "args": ["tekneh"] } } }
27
+ ```
28
+
29
+ Public source and PyPI metadata Repository: **`https://github.com/joonhyungbae/tekneh`**.
30
+ Author: Joonhyung Bae \<jh.bae@kaist.ac.kr\>. You do not need to put PyPI/GitHub in the paper body.
31
+ Export and history cleanup: `EXPORT.md`.
32
+ | Client | Where to put it | Differences |
33
+ |---|---|---|
34
+ | Claude Code | `claude mcp add tekneh -- uvx tekneh` | or `.mcp.json` |
35
+ | Claude Desktop | `claude_desktop_config.json` | block above as-is |
36
+ | Cursor | `~/.cursor/mcp.json` · `.cursor/mcp.json` | block above as-is |
37
+ | Cline · Continue · Windsurf | each extension’s MCP settings | block above as-is |
38
+ | VS Code (Copilot agent) | `.vscode/mcp.json` | top-level key is **`servers`**; entry needs `"type": "stdio"` |
39
+ | Zed | `settings.json` | top-level key is **`context_servers`** |
40
+ | Codex CLI | `~/.codex/config.toml` | **TOML** — see below |
41
+
42
+ ```toml
43
+ # ~/.codex/config.toml
44
+ [mcp_servers.tekneh]
45
+ command = "uvx"
46
+ args = ["tekneh"]
47
+ ```
48
+
49
+ Config schemas drift a little by client. If it does not attach, check only the key names in that tool’s latest MCP docs — `command`/`args` are the same everywhere.
50
+
51
+ ### Transport
52
+
53
+ Default is **stdio**; all settings above use it. For remote or web clients:
54
+
55
+ ```bash
56
+ tekneh --http --port 6230 # streamable-http, http://127.0.0.1:6230/mcp
57
+ tekneh --sse # legacy SSE
58
+ ```
59
+
60
+ ```json
61
+ { "mcpServers": { "tekneh": { "url": "http://127.0.0.1:6230/mcp" } } }
62
+ ```
63
+
64
+ From inside the repo, run `python -m tekneh_mcp`. Data location: `TEKNEH_DATA=/path` or `--data`.
65
+
66
+ ### If the tool does not use MCP
67
+
68
+ The same queries are available via the MCP tools above (or `uvx tekneh` with an MCP client).
69
+ Return shape matches the tool results. Codebook role labels such as `런타임` (runtime) are stored as-is in the CSVs.
70
+
71
+ ## Five tools
72
+
73
+ | Tool | What it does |
74
+ |---|---|
75
+ | `corpus_info` | Corpus boundary · population · human-confirmed values · citation rules. **Call this first** |
76
+ | `field_stats` | How often a field is stated. Denominator and absent count together |
77
+ | `search_works` | Search works. **Filter with `absent` for “what the paper did not write”** |
78
+ | `works_using` | Works that used a given tool. `role` separates runtime / production / learning |
79
+ | `cite` | Source quote (20 words) · section locus · doi |
80
+
81
+ ## Four reading rules
82
+
83
+ This corpus is valuable because **you can count what is missing**. Reading it differs from the usual.
84
+
85
+ 1. **`absent` is a property of the document, not the work.** Not “this work used no power,” but
86
+ **“not stated in the paper (whether it existed is unknown).”** Use the return’s `phrasing` and `reading_note` as written.
87
+ 2. **If `small_cell` is true, do not generalize.** Denominator under 30. Sound has 27 papers, robotics 30, so
88
+ “sound is done with Max/MSP” (4/27) is false. Always report the denominator.
89
+ 3. **State `boundary` in the answer.** SIGGRAPH and SIGGRAPH Asia art papers 2009–2026 only.
90
+ No Ars Electronica, NIME, ISEA, exhibition catalogs, or artist websites. The population is **papers, not works**.
91
+ 4. **If `use_this` is present, use that value, not `rate`.** The machine overcounts prose lists and third-party URLs as stated.
92
+
93
+ | Field | Machine | Value to use |
94
+ |---|---:|---|
95
+ | Venue requirements | 25.9% | **20.5%** (16.2–24.8) |
96
+ | Reproducibility (public) | 10.5% | **6.1%** — a **lower bound**, not a point estimate. Write “6–14%” |
97
+
98
+ ## What this corpus does well / poorly
99
+
100
+ **Does well.** What it was made with — tools named in 79% of papers; 457 unique kinds with
101
+ runtime / production / learning roles. Form × tool join reaches 80%.
102
+
103
+ **Does poorly.** How to remake it. Venue conditions are stated in 20.5%; public release in only 6–14%.
104
+ It cannot help with circuit debugging — papers do not record wiring faults.
105
+ Turning `absent` into **questions to ask the artist** is the proper use of this data.
106
+
107
+ ## Citation
108
+
109
+ Annotations are CC BY 4.0. **Source quotes are capped at 20 words per field**; the server enforces that bound.
110
+ For more, follow `doi` to the original paper — ACM DL blocks scripted access, so do not crawl.
111
+
112
+ ## Building from the repository
113
+
114
+ Shipped wheels already include `query.py` and the CSV tables under `src/tekneh_mcp/`.
115
+ Those files are produced before `uv build` and are not committed.
116
+
117
+ ```bash
118
+ bash sync.sh # maintainers: refresh bundled data, then:
119
+ uv build
120
+ UV_PUBLISH_TOKEN=pypi-... bash publish.sh --upload
121
+ ```
122
+
123
+ Or use GitHub Actions Trusted Publishing so Actions uploads without a token — often requires a public repo.
124
+
125
+ See `EXPORT.md` for packaging notes.
tekneh-0.1.0/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # Tekneh MCP
2
+
3
+ An MCP server for asking what SIGGRAPH and SIGGRAPH Asia art papers **wrote — and did not write — about implementation**.
4
+
5
+ It ships a corpus of 229 work papers (2009–2026) fully coded on 11 implementation fields.
6
+ Data is bundled in the package, so **no server and no network are required.** CSV is 566KB; it starts instantly.
7
+
8
+ ## Install — any MCP client
9
+
10
+ MCP is an open protocol. **This server is not tied to any one vendor’s product.** It speaks standard JSON-RPC over stdio, so any MCP-capable client can attach. Most use the block below as-is.
11
+
12
+ ```json
13
+ { "mcpServers": { "tekneh": { "command": "uvx", "args": ["tekneh"] } } }
14
+ ```
15
+
16
+ Public source and PyPI metadata Repository: **`https://github.com/joonhyungbae/tekneh`**.
17
+ Author: Joonhyung Bae \<jh.bae@kaist.ac.kr\>. You do not need to put PyPI/GitHub in the paper body.
18
+ Export and history cleanup: `EXPORT.md`.
19
+ | Client | Where to put it | Differences |
20
+ |---|---|---|
21
+ | Claude Code | `claude mcp add tekneh -- uvx tekneh` | or `.mcp.json` |
22
+ | Claude Desktop | `claude_desktop_config.json` | block above as-is |
23
+ | Cursor | `~/.cursor/mcp.json` · `.cursor/mcp.json` | block above as-is |
24
+ | Cline · Continue · Windsurf | each extension’s MCP settings | block above as-is |
25
+ | VS Code (Copilot agent) | `.vscode/mcp.json` | top-level key is **`servers`**; entry needs `"type": "stdio"` |
26
+ | Zed | `settings.json` | top-level key is **`context_servers`** |
27
+ | Codex CLI | `~/.codex/config.toml` | **TOML** — see below |
28
+
29
+ ```toml
30
+ # ~/.codex/config.toml
31
+ [mcp_servers.tekneh]
32
+ command = "uvx"
33
+ args = ["tekneh"]
34
+ ```
35
+
36
+ Config schemas drift a little by client. If it does not attach, check only the key names in that tool’s latest MCP docs — `command`/`args` are the same everywhere.
37
+
38
+ ### Transport
39
+
40
+ Default is **stdio**; all settings above use it. For remote or web clients:
41
+
42
+ ```bash
43
+ tekneh --http --port 6230 # streamable-http, http://127.0.0.1:6230/mcp
44
+ tekneh --sse # legacy SSE
45
+ ```
46
+
47
+ ```json
48
+ { "mcpServers": { "tekneh": { "url": "http://127.0.0.1:6230/mcp" } } }
49
+ ```
50
+
51
+ From inside the repo, run `python -m tekneh_mcp`. Data location: `TEKNEH_DATA=/path` or `--data`.
52
+
53
+ ### If the tool does not use MCP
54
+
55
+ The same queries are available via the MCP tools above (or `uvx tekneh` with an MCP client).
56
+ Return shape matches the tool results. Codebook role labels such as `런타임` (runtime) are stored as-is in the CSVs.
57
+
58
+ ## Five tools
59
+
60
+ | Tool | What it does |
61
+ |---|---|
62
+ | `corpus_info` | Corpus boundary · population · human-confirmed values · citation rules. **Call this first** |
63
+ | `field_stats` | How often a field is stated. Denominator and absent count together |
64
+ | `search_works` | Search works. **Filter with `absent` for “what the paper did not write”** |
65
+ | `works_using` | Works that used a given tool. `role` separates runtime / production / learning |
66
+ | `cite` | Source quote (20 words) · section locus · doi |
67
+
68
+ ## Four reading rules
69
+
70
+ This corpus is valuable because **you can count what is missing**. Reading it differs from the usual.
71
+
72
+ 1. **`absent` is a property of the document, not the work.** Not “this work used no power,” but
73
+ **“not stated in the paper (whether it existed is unknown).”** Use the return’s `phrasing` and `reading_note` as written.
74
+ 2. **If `small_cell` is true, do not generalize.** Denominator under 30. Sound has 27 papers, robotics 30, so
75
+ “sound is done with Max/MSP” (4/27) is false. Always report the denominator.
76
+ 3. **State `boundary` in the answer.** SIGGRAPH and SIGGRAPH Asia art papers 2009–2026 only.
77
+ No Ars Electronica, NIME, ISEA, exhibition catalogs, or artist websites. The population is **papers, not works**.
78
+ 4. **If `use_this` is present, use that value, not `rate`.** The machine overcounts prose lists and third-party URLs as stated.
79
+
80
+ | Field | Machine | Value to use |
81
+ |---|---:|---|
82
+ | Venue requirements | 25.9% | **20.5%** (16.2–24.8) |
83
+ | Reproducibility (public) | 10.5% | **6.1%** — a **lower bound**, not a point estimate. Write “6–14%” |
84
+
85
+ ## What this corpus does well / poorly
86
+
87
+ **Does well.** What it was made with — tools named in 79% of papers; 457 unique kinds with
88
+ runtime / production / learning roles. Form × tool join reaches 80%.
89
+
90
+ **Does poorly.** How to remake it. Venue conditions are stated in 20.5%; public release in only 6–14%.
91
+ It cannot help with circuit debugging — papers do not record wiring faults.
92
+ Turning `absent` into **questions to ask the artist** is the proper use of this data.
93
+
94
+ ## Citation
95
+
96
+ Annotations are CC BY 4.0. **Source quotes are capped at 20 words per field**; the server enforces that bound.
97
+ For more, follow `doi` to the original paper — ACM DL blocks scripted access, so do not crawl.
98
+
99
+ ## Building from the repository
100
+
101
+ Shipped wheels already include `query.py` and the CSV tables under `src/tekneh_mcp/`.
102
+ Those files are produced before `uv build` and are not committed.
103
+
104
+ ```bash
105
+ bash sync.sh # maintainers: refresh bundled data, then:
106
+ uv build
107
+ UV_PUBLISH_TOKEN=pypi-... bash publish.sh --upload
108
+ ```
109
+
110
+ Or use GitHub Actions Trusted Publishing so Actions uploads without a token — often requires a public repo.
111
+
112
+ See `EXPORT.md` for packaging notes.
@@ -0,0 +1,38 @@
1
+ [project]
2
+ name = "tekneh"
3
+ version = "0.1.0"
4
+ description = "SIGGRAPH and SIGGRAPH Asia art-paper technē corpus — what papers state about making media art, and what they leave unstated"
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ license = { text = "CC-BY-4.0" }
8
+ authors = [
9
+ { name = "Joonhyung Bae", email = "jh.bae@kaist.ac.kr" },
10
+ ]
11
+ dependencies = ["mcp>=1.2.0"]
12
+
13
+ [project.urls]
14
+ Homepage = "https://tekneh.com"
15
+ Repository = "https://github.com/joonhyungbae/tekneh"
16
+ Documentation = "https://tekneh.com/about.html"
17
+
18
+ [project.scripts]
19
+ tekneh = "tekneh_mcp.server:main"
20
+
21
+ [build-system]
22
+ requires = ["hatchling"]
23
+ build-backend = "hatchling.build"
24
+
25
+ # data/·query.py are sync.sh copies and gitignored. ignore-vcs so the wheel still
26
+ # ships them. only-include keeps nested research/site checkouts out of the sdist.
27
+ [tool.hatch.build]
28
+ ignore-vcs = true
29
+
30
+ [tool.hatch.build.targets.sdist]
31
+ only-include = [
32
+ "src/tekneh_mcp",
33
+ "README.md",
34
+ "pyproject.toml",
35
+ ]
36
+
37
+ [tool.hatch.build.targets.wheel]
38
+ packages = ["src/tekneh_mcp"]
@@ -0,0 +1,2 @@
1
+ """Tekneh MCP — 아트 페이퍼 구현 코퍼스 질의 서버."""
2
+ __version__ = "0.1.0"
@@ -0,0 +1,2 @@
1
+ from .server import main
2
+ main()