@lionad/port-key-mcp 0.1.6 → 0.2.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/README.md +92 -92
- package/locales/ar.json +1 -1
- package/locales/cn.json +1 -1
- package/locales/de.json +1 -1
- package/locales/es.json +1 -1
- package/locales/fr.json +1 -1
- package/locales/it.json +1 -1
- package/locales/ja.json +1 -1
- package/locales/ko.json +1 -1
- package/locales/pt.json +1 -1
- package/locales/ru.json +1 -1
- package/package.json +8 -9
package/README.md
CHANGED
|
@@ -1,114 +1,84 @@
|
|
|
1
|
-
# PortKey
|
|
1
|
+
# PortKey
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img width="200" src="/public/logo.png" />
|
|
5
|
+
</p>
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>PortKey:A Simple, Practical Port Naming Strategy</strong>
|
|
9
|
+
</p>
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
<p align="center">
|
|
12
|
+
<!-- LANGUAGES=("cn" "es" "fr" "de" "ja" "ko" "ru" "ar" "pt" "it") -->
|
|
13
|
+
<a href="./docs/README.cn.md">中文</a> | <a href="./docs/README.es.md">Español</a> | <a href="./docs/README.fr.md">Français</a> | <a href="./docs/README.de.md">Deutsch</a> | <a href="./docs/README.ja.md">日本語</a> | <a href="./docs/README.ko.md">한국어</a> | <a href="./docs/README.ru.md">Русский</a> | <a href="./docs/README.ar.md">العربية</a> | <a href="./docs/README.pt.md">Português</a> | <a href="./docs/README.it.md">Italiano</a>
|
|
14
|
+
</p>
|
|
8
15
|
|
|
9
|
-
|
|
16
|
+
## Brief
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
npm install @lionad/port-key-mcp
|
|
13
|
-
```
|
|
18
|
+
Generate ports with a letter-to-number keyboard mapping
|
|
14
19
|
|
|
15
|
-
|
|
20
|
+
When you’re running a bunch of projects locally, picking port numbers becomes annoying.
|
|
16
21
|
|
|
17
|
-
|
|
22
|
+
- Over the last couple of years, there have been *so many* new projects. To really try them out, you often need to boot them locally—and then ports start colliding.
|
|
23
|
+
- If you want to keep browser tabs (or bookmarks) stable, a project’s port shouldn’t keep changing.
|
|
18
24
|
|
|
19
|
-
|
|
25
|
+
For example, I have more than ten Nuxt apps on my machine. If they all default to `3000`, that’s obviously not going to work. So I came up with a simple, consistent port naming rule to “assign” ports per project.
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
npx @lionad/port-key-mcp
|
|
23
|
-
```
|
|
27
|
+
[Source Blog Post](https://lionad.art/articles/simple-naming-method)
|
|
24
28
|
|
|
25
|
-
###
|
|
29
|
+
### Core idea
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
Instead of picking random numbers, map the **project name to numbers based on the keyboard**, so the port is *readable* and *memorable*.
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
- **get-design-philosophy**: Get design philosophy and background of PortKey
|
|
33
|
+
As long as the result is within the valid port range (**1024–65535**) and doesn’t hit reserved/system ports, you can just use it.
|
|
31
34
|
|
|
32
|
-
|
|
35
|
+
More specifically: using a standard QWERTY keyboard, map each letter to a single digit based on its **row/column position**.
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
Example:
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
- `map` (string, optional): Custom mapping in JSON format (e.g., `{ "1": "qaz", "2": "wsx", ... }`)
|
|
38
|
-
- `preferDigitCount` (number, optional): Preferred digit count for port (2-5, default: 4)
|
|
39
|
-
- `minPort` (number, optional): Minimum port number (0-65535, default: 0)
|
|
40
|
-
- `maxPort` (number, optional): Maximum port number (0-65535, default: 65535)
|
|
41
|
-
- `blockedPorts` (array of numbers, optional): List of blocked port numbers to avoid
|
|
39
|
+
`"cfetch"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(port number)
|
|
42
40
|
|
|
43
|
-
|
|
41
|
+
Then you can take the first 4 digits (e.g. `3453`), or keep more digits (e.g. `34353`). Either is fine.
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
{
|
|
47
|
-
"name": "map-project-name-to-port",
|
|
48
|
-
"arguments": {
|
|
49
|
-
"projectName": "cfetch",
|
|
50
|
-
"preferDigitCount": 4
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
```
|
|
43
|
+
If a project needs multiple ports (frontend, backend, database, etc.), pick **one** of these two approaches:
|
|
54
44
|
|
|
55
|
-
|
|
45
|
+
1. Use the project prefix, then append a “role suffix”
|
|
46
|
+
- For `"cfetch"`, take `3435` as the base
|
|
47
|
+
- Frontend (`fe`, i.e. `43`) → `34354`
|
|
48
|
+
- Backend (`server`) → `34352`
|
|
49
|
+
- Database (`mongo`) → `34357`
|
|
50
|
+
- …and so on
|
|
56
51
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
```
|
|
52
|
+
2. Use the project prefix, then assign sequential roles
|
|
53
|
+
- For `"cfetch"`, take `3435` as the base
|
|
54
|
+
- Web → `34351`
|
|
55
|
+
- Backend → `34352`
|
|
56
|
+
- Database → `34353`
|
|
57
|
+
- …and so on
|
|
64
58
|
|
|
65
|
-
|
|
59
|
+
### Valid port range
|
|
66
60
|
|
|
67
|
-
|
|
61
|
+
- Ports must be within **1024–65535** (System ports 0-1023 are blocked).
|
|
62
|
+
- **System Ports (0-1023)**: Assigned by IETF. Strictly blocked.
|
|
63
|
+
- **User Ports (1024-49151)**: Assigned by IANA. Use with caution as they might conflict with registered services.
|
|
64
|
+
- **Dynamic/Private Ports (49152-65535)**: Not assigned. Safest for private or dynamic use.
|
|
68
65
|
|
|
69
|
-
|
|
66
|
+
---
|
|
70
67
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
```json
|
|
74
|
-
{
|
|
75
|
-
"name": "get-design-philosophy",
|
|
76
|
-
"arguments": {
|
|
77
|
-
"lang": "en"
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
```
|
|
68
|
+
## How to use
|
|
81
69
|
|
|
82
|
-
|
|
70
|
+
Simple command:
|
|
83
71
|
|
|
72
|
+
```sh
|
|
73
|
+
npx -y @lionad/port-key <your-project-name>
|
|
84
74
|
```
|
|
85
|
-
以下是 PortKey 的设计理念:
|
|
86
75
|
|
|
87
|
-
|
|
76
|
+
Or you want a stdio MCP server:
|
|
88
77
|
|
|
89
|
-
|
|
90
|
-
|
|
78
|
+
```sh
|
|
79
|
+
npx -y @lionad/port-key-mcp
|
|
91
80
|
```
|
|
92
81
|
|
|
93
|
-
##### Supported Languages
|
|
94
|
-
|
|
95
|
-
| Code | Language |
|
|
96
|
-
|-------|------------|
|
|
97
|
-
| cn | 中文 |
|
|
98
|
-
| es | Español |
|
|
99
|
-
| fr | Français |
|
|
100
|
-
| de | Deutsch |
|
|
101
|
-
| ja | 日本語 |
|
|
102
|
-
| ko | 한국어 |
|
|
103
|
-
| ru | Русский |
|
|
104
|
-
| ar | العربية |
|
|
105
|
-
| pt | Português |
|
|
106
|
-
| it | Italiano |
|
|
107
|
-
|
|
108
|
-
## Configuration
|
|
109
|
-
|
|
110
|
-
You can configure MCP server in your MCP client's configuration file (e.g., for VS Code Copilot, configure in your `.copilot/settings.json`):
|
|
111
|
-
|
|
112
82
|
```json
|
|
113
83
|
{
|
|
114
84
|
"mcpServers": {
|
|
@@ -120,22 +90,52 @@ You can configure MCP server in your MCP client's configuration file (e.g., for
|
|
|
120
90
|
}
|
|
121
91
|
```
|
|
122
92
|
|
|
123
|
-
## Development
|
|
124
93
|
|
|
125
|
-
|
|
94
|
+
### CLI options
|
|
126
95
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
96
|
+
- `-m, --map <object>`: custom mapping (JSON or JS-like object literal)
|
|
97
|
+
- `--lang <code>`: output language (currently only `en` and `cn`, default: `cn`)
|
|
98
|
+
- `-d, --digits <count>`: preferred digit count for port (4 or 5, default: 4)
|
|
99
|
+
- `-h, --help`: show help
|
|
130
100
|
|
|
131
|
-
|
|
101
|
+
Examples:
|
|
132
102
|
|
|
133
|
-
```
|
|
134
|
-
|
|
103
|
+
```bash
|
|
104
|
+
npx @lionad/port-key cfetch # -> 3435
|
|
105
|
+
npx @lionad/port-key cfetch --digits 4 # -> 3435 (4-digit port)
|
|
106
|
+
npx @lionad/port-key cfetch --digits 5 # -> 34353 (5-digit port)
|
|
135
107
|
```
|
|
136
108
|
|
|
137
|
-
|
|
109
|
+
Notes:
|
|
110
|
+
- Default log language is `cn`. Use `--lang en` to show English messages.
|
|
111
|
+
- Use `-h` or `--help` to show help.
|
|
112
|
+
|
|
113
|
+
### Config
|
|
114
|
+
|
|
115
|
+
PortKey reads optional user config from:
|
|
116
|
+
|
|
117
|
+
- `~/.port-key/config.json`
|
|
138
118
|
|
|
139
|
-
|
|
140
|
-
|
|
119
|
+
A full Example:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
// Preferred digit count for port (4 or 5)
|
|
124
|
+
"preferDigitCount": 5,
|
|
125
|
+
// Custom letter-to-digit mapping
|
|
126
|
+
"blockedPorts": [3000, 3001, 3002, 6666],
|
|
127
|
+
// Port range limits (inclusive)
|
|
128
|
+
"minPort": 1024,
|
|
129
|
+
"maxPort": 49151
|
|
130
|
+
}
|
|
141
131
|
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## For Developer
|
|
136
|
+
|
|
137
|
+
### Project Structure
|
|
138
|
+
|
|
139
|
+
- 本仓库采用 pnpm monorepo;核心包位于 `packages/core`。
|
|
140
|
+
- 安装:在根目录执行 `pnpm install`。
|
|
141
|
+
- 运行测试:`pnpm -C packages/core test` 或 `pnpm -C packages/core test:watch`。
|
package/locales/ar.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nإنشاء
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nإنشاء منافذ باستخدام خريطة أحرف إلى أرقام على لوحة المفاتيح \nعند تشغيل مجموعة من المشاريع محليًا، يصبح اختيار أرقام المنافذ أمرًا مزعجًا.\n- خلال السنوات القليلة الماضية، ظهرت *العديد* من المشاريع الجديدة. لتجربتها فعليًا، غالبًا ما تحتاج إلى تشغيلها محليًا—ثم تبدأ المنافذ في التعارض.\n- إذا أردت الحفاظ على استقرار علامات تبويب المتصفح (أو الإشارات المرجعية)، لا يجب أن يتغير منفذ المشروع باستمرار.\nعلى سبيل المثال، لدي أكثر من عشرة تطبيقات Nuxt على جهازي. إذا كان جميعها يستخدم المنفذ الافتراضي `3000`، فهذا واضح أنه لن يعمل. لذا صممت قاعدة بسيطة ومتسقة لتسمية المنافذ \"تخصيصًا\" لكل مشروع.\n[مقال المدونة الأصلي](https://lionad.art/articles/simple-naming-method)\n### الفكرة الأساسية\nبدلاً من اختيار أرقام عشوائية، يتم تحويل **اسم المشروع إلى أرقام بناءً على لوحة المفاتيح**، بحيث يكون المنفذ *قابلًا للقراءة* و*سهل التذكر*.\nطالما أن النتيجة تقع ضمن نطاق المنافذ الصالحة (**1024–65535**) ولا تصطدم بالمنافذ المحجوزة/النظامية، يمكنك استخدامها مباشرة.\nبشكل أكثر تحديدًا: باستخدام لوحة مفاتيح QWERTY قياسية، خريطة كل حرف إلى رقم واحد بناءً على **موضعه في الصف/العمود**.\nمثال:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(رقم المنفذ)\nيمكنك أخذ أول أربعة أرقام (مثلاً `3453`)، أو الاحتفاظ بالمزيد من الأرقام (مثلًا `34353`). كلا الخيارين مقبولان.\nإذا كان المشروع يحتاج إلى عدة منافذ (واجهة أمامية، خادم خلفي، قاعدة بيانات، إلخ)، اختر أحد النهجين التاليين:\n1. استخدام بادئة المشروع، ثم إلحاق “لاحقة الدور” \n - بالنسبة لـ `\"cfetch\"`، خذ `3435` كأساس \n - الواجهة الأمامية (`fe` أي `43`) → `34354` \n - الخادم الخلفي (`server`) → `34352` \n - قاعدة البيانات (`mongo`) → `34357` \n - …وهكذا\n2. استخدام بادئة المشروع، ثم إسناد الأدوار تسلسليًا \n - بالنسبة لـ `\"cfetch\"`، خذ `3435` كأساس \n - الويب → `34351` \n - الخادم الخلفي → `34352` \n - قاعدة البيانات → `34353` \n - …وهكذا\n### نطاق المنافذ الصالحة\n- يجب أن تكون المنافذ ضمن **1024–65535** (المنافذ النظامية 0-1023 محجوبة).\n- **المنافذ النظامية (0-1023)**: مخصصة من قبل IETF. محجوبة تمامًا.\n- **منافذ المستخدم (1024-49151)**: مخصصة من قبل IANA. استخدم بحذر لأنها قد تتصادم مع الخدمات المسجلة.\n- **المنافذ الديناميكية/الخاصة (49152-65535)**: غير مخصصة. الأكثر أمانًا للاستخدام الخاص أو الديناميكي.\n---"
|
|
3
3
|
}
|
package/locales/cn.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\n
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\n使用字母到数字的键盘映射生成端口号 \n当你在本地运行多个项目时,挑选端口号会变得非常麻烦。\n- 过去几年里出现了*大量*新项目。要真正尝试它们,往往需要在本地启动——这时端口号就会冲突。 \n- 若希望浏览器标签页(或书签)保持稳定,项目的端口号不应随意变动。\n举例来说,我机器上有十多个 Nuxt 应用。如果它们全部默认使用 `3000`,显然是行不通的。因此,我想出了一个简单且统一的端口命名规则,以“分配”每个项目对应的端口。\n[来源博客文章](https://lionad.art/articles/simple-naming-method)\n### 核心思路\n不使用随机数字,而是**根据键盘布局将项目名称映射为数字**,使端口号既可读又易记。\n只要生成的结果落在合法端口范围(**1024–65535**)且不冲突系统保留端口,即可直接使用。\n更具体地说:以标准 QWERTY 键盘为例,将每个字母映射到其所在**行/列位置对应的单个数字**。\n示例:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(端口号)\n然后可以取前 4 位数字(如 `3453`),也可以保留更多位数(如 `34353`)。两者皆可。\n若项目需要多个端口(前端、后端、数据库等),可以选择以下两种方式之一:\n1. 使用项目前缀,再追加“角色后缀” \n - 对 `\"cfetch\"`,取 `3435` 作为基数 \n - 前端(`fe`,即 `43`) → `34354` \n - 后端(`server`) → `34352` \n - 数据库(`mongo`) → `34357` \n - …以此类推\n2. 使用项目前缀,再分配顺序角色 \n - 对 `\"cfetch\"`,取 `3435` 作为基数 \n - Web → `34351` \n - 后端 → `34352` \n - 数据库 → `34353` \n - …以此类推\n### 合法端口范围\n- 端口必须位于 **1024–65535**(系统保留端口 0-1023 不可用)。 \n- **系统端口(0‑1023)**:由 IETF 分配,严格禁止使用。 \n- **用户端口(1024‑49151)**:由 IANA 分配,使用时需注意可能与已注册服务冲突。 \n- **动态/私有端口(49152‑65535)**:未分配,最适合用于私有或动态场景。\n---"
|
|
3
3
|
}
|
package/locales/de.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nPorts anhand einer Buchstaben‑zu‑
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nPorts anhand einer Buchstaben‑zu‑Ziffern‑Tastaturabbildung generieren\nWenn Sie mehrere Projekte lokal ausführen, wird die Auswahl von Port‑Nummern schnell lästig.\n- In den letzten Jahren sind *so viele* neue Projekte entstanden. Um sie auszuprobieren, muss man sie häufig lokal starten – und dann kollidieren die Ports.\n- Wenn Sie Browser‑Tabs (oder Lesezeichen) stabil halten wollen, sollte sich der Port eines Projekts nicht ständig ändern.\nBeispielsweise habe ich mehr als zehn Nuxt‑Apps auf meinem Rechner. Wenn sie alle standardmäßig `3000` verwenden würden, käme das natürlich nicht infrage. Deshalb habe ich mir eine einfache, konsistente Port‑Benennungsregel ausgedacht, um „Ports“ pro Projekt zuzuweisen.\n[Quell‑Blog‑Beitrag](https://lionad.art/articles/simple-naming-method)\n### Kernidee\nAnstatt zufällige Zahlen zu wählen, wird der **Projektname anhand einer Tastatur** auf Ziffern abgebildet, sodass der Port *lesbar* und *einprägsam* ist.\nSolange das Ergebnis im gültigen Port‑Bereich (**1024–65535**) liegt und keine reservierten/System‑Ports belegt, kann es verwendet werden.\nGenauer: Auf einer Standard‑QWERTY‑Tastatur wird jeder Buchstabe anhand seiner **Zeilen‑/Spaltenposition** einer einzelnen Ziffer zugeordnet.\nBeispiel:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(Port‑Nummer)\nDann kann man entweder die ersten 4 Ziffern (z. B. `3453`) oder mehr Ziffern (z. B. `34353`) verwenden – beides ist zulässig.\nFalls ein Projekt mehrere Ports benötigt (Frontend, Backend, Datenbank usw.), wählen Sie **eine** der beiden folgenden Vorgehensweisen:\n1. Verwenden Sie das Projekt‑Präfix und hängen einen „Rollen‑Suffix“ an \n - Für `\"cfetch\"` nehmen Sie `3435` als Basis \n - Frontend (`fe`, d. h. `43`) → `34354` \n - Backend (`server`) → `34352` \n - Datenbank (`mongo`) → `34357` \n - … und so weiter\n2. Verwenden Sie das Projekt‑Präfix und ordnen Rollen sequenziell zu \n - Für `\"cfetch\"` nehmen Sie `3435` als Basis \n - Web → `34351` \n - Backend → `34352` \n - Datenbank → `34353` \n - … und so weiter\n### Gültiger Port‑Bereich\n- Ports müssen im Bereich **1024–65535** liegen (System‑Ports 0‑1023 sind gesperrt).\n- **Systemports (0‑1023)**: Von IETF zugewiesen. Streng gesperrt.\n- **Benutzerports (1024‑49151)**: Von IANA zugewiesen. Mit Vorsicht verwenden, da sie mit registrierten Diensten kollidieren können.\n- **Dynamische/Private Ports (49152‑65535)**: Nicht zugewiesen. Am sichersten für private oder dynamische Nutzung.\n---"
|
|
3
3
|
}
|
package/locales/es.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nGenerar puertos mediante un mapeo de
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nGenerar puertos mediante un mapeo de letras a números del teclado.\nCuando ejecutas varios proyectos localmente, elegir números de puerto se vuelve molesto.\n- En los últimos años han surgido *tantos* nuevos proyectos. Para probarlos realmente, a menudo necesitas iniciarlos localmente—y entonces los puertos empiezan a colisionar.\n- Si deseas que las pestañas del navegador (o marcadores) permanezcan estables, el puerto de un proyecto no debería cambiar constantemente.\nPor ejemplo, tengo más de diez aplicaciones Nuxt en mi máquina. Si todas usan `3000` por defecto, obviamente no funcionará. Así que ideé una regla simple y consistente para nombrar puertos por proyecto.\n[Publicación original del blog](https://lionad.art/articles/simple-naming-method)\n### Idea principal\nEn lugar de elegir números aleatorios, asigna el **nombre del proyecto a números basados en el teclado**, de modo que el puerto sea *legible* y *memorable*.\nMientras el resultado esté dentro del rango de puertos válidos (**1024–65535**) y no choque con puertos reservados/sistema, puedes usarlo directamente.\nMás concretamente: usando un teclado QWERTY estándar, asigna a cada letra un único dígito según su **posición de fila/columna**.\nEjemplo:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(número de puerto)\nLuego puedes tomar los primeros 4 dígitos (p. ej., `3453`) o conservar más dígitos (p. ej., `34353`). Cualquiera está bien.\nSi un proyecto necesita varios puertos (frontend, backend, base de datos, etc.), elige **una** de estas dos formas:\n1. Usa el prefijo del proyecto y luego agrega un “sufijo de rol” \n - Para `\"cfetch\"`, toma `3435` como base \n - Frontend (`fe`, es decir, `43`) → `34354` \n - Backend (`server`) → `34352` \n - Base de datos (`mongo`) → `34357` \n - …y así sucesivamente\n2. Usa el prefijo del proyecto y asigna roles secuenciales \n - Para `\"cfetch\"`, toma `3435` como base \n - Web → `34351` \n - Backend → `34352` \n - Base de datos → `34353` \n### Rango válido de puertos\n- Los puertos deben estar dentro del rango **1024–65535** (los puertos del sistema 0‑1023 están bloqueados).\n- **Puertos de Sistema (0‑1023)**: asignados por IETF. Estrictamente bloqueados.\n- **Puertos de Usuario (1024‑49151)**: asignados por IANA. Úsalos con precaución pues pueden entrar en conflicto con servicios registrados.\n- **Puertos Dinámicos/Privados (49152‑65535)**: no asignados. Los más seguros para uso privado o dinámico.\n---"
|
|
3
3
|
}
|
package/locales/fr.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nGénérez des ports à l’aide d’une correspondance lettre‑à‑chiffre du clavier\nLorsque vous exécutez plusieurs projets localement, choisir des numéros de port devient pénible.\n- Au cours des dernières années, il y a eu *tant* de nouveaux projets. Pour les tester réellement, vous devez souvent les lancer localement — et les ports se chevauchent alors.\n- Si vous souhaitez que les onglets du navigateur (ou les favoris) restent stables, le port d’un projet ne doit pas changer continuellement.\nPar exemple, j’ai plus de dix applications Nuxt sur ma machine. Si elles utilisent toutes le port par défaut `3000`, cela ne fonctionnerait évidemment pas. J’ai donc inventé une règle simple et cohérente de nommage des ports pour « attribuer » un port à chaque projet.\n[Article de blog source](https://lionad.art/articles/simple-naming-method)\n### Idée principale\nAu lieu de choisir des nombres aléatoires, mappez le **nom du projet à des chiffres selon la disposition du clavier**, de sorte que le port soit *lisible* et *mémorable*.\nDu moment que le résultat se situe dans la plage de ports valide (**1024–65535**) et n’interfère pas avec les ports réservés/système, vous pouvez l’utiliser tel quel.\nPlus précisément : en se basant sur un clavier QWERTY standard, chaque lettre est associée à un chiffre unique en fonction de sa **position ligne/colonne**.\nExemple :\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(numéro de port)\nVous pouvez alors prendre les 4 premiers chiffres (par ex. `3453`), ou conserver davantage de chiffres (par ex. `34353`). Les deux options sont valides.\nSi un projet requiert plusieurs ports (frontend, backend, base de données, etc.), choisissez **l’une** des deux approches suivantes :\n1. Utilisez le préfixe du projet, puis ajoutez un « suffixe de rôle » \n - Pour `\"cfetch\"`, prenez `3435` comme base \n - Frontend (`fe`, c’est‑à‑dire `43`) → `34354` \n - Backend (`server`) → `34352` \n - Base de données (`mongo`) → `34357` \n - …et ainsi de suite\n2. Utilisez le préfixe du projet, puis attribuez des rôles séquentiels \n - Pour `\"cfetch\"`, prenez `3435` comme base \n - Web → `34351` \n - Backend → `34352` \n - Base de données → `34353` \n - …et ainsi de suite\n### Plage de ports valide\n- Les ports doivent être compris entre **1024–65535** (les ports système 0‑1023 sont bloqués).\n- **Ports système (0‑1023)** : assignés par l’IETF. Strictement bloqués.\n- **Ports utilisateur (1024‑49151)** : assignés par l’IANA. À utiliser avec précaution car ils peuvent entrer en conflit avec des services enregistrés.\n- **Ports dynamiques/privés (49152‑65535)** : non assignés. Les plus sûrs pour un usage privé ou dynamique.\n---"
|
|
3
3
|
}
|
package/locales/it.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nGenera porte
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nGenera porte con una mappatura da lettere a numeri della tastiera.\nQuando gestisci più progetti in locale, scegliere i numeri di porta può diventare fastidioso.\n- Negli ultimi anni sono nati *tantissimi* nuovi progetti. Per provarli è spesso necessario avviarli localmente—e le porte iniziano a collidere.\n- Se vuoi mantenere gli URL o i segnalibri del browser stabili, la porta di un progetto non dovrebbe cambiare continuamente.\nAd esempio, ho più di dieci app Nuxt sulla mia macchina. Se tutti usassero la porta predefinita `3000`, ovviamente non funzionerebbe. Ho quindi ideato una regola semplice e coerente per “assegnare” porte a ciascun progetto.\n[Post del blog originale](https://lionad.art/articles/simple-naming-method)\n### Idea principale\nInvece di scegliere numeri a caso, mappa **il nome del progetto a numeri basati sulla tastiera**, così la porta risulta *leggibile* e *memorizzabile*.\nFinché il risultato rientra nell’intervallo valido delle porte (**1024–65535**) e non coincide con porte riservate/sistema, può essere usato liberamente.\nPiù in dettaglio: usando una tastiera QWERTY standard, associa ogni lettera a una singola cifra in base alla sua **posizione riga/colonna**.\nEsempio:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(numero di porta)\nPuoi prendere le prime 4 cifre (es. `3453`) oppure mantenere più cifre (es. `34353`). Entrambe le scelte vanno bene.\nSe un progetto richiede più porte (frontend, backend, database, ecc.), scegli **uno** dei due approcci seguenti:\n1. Usa il prefisso del progetto, quindi aggiungi un “suffisso di ruolo” \n - Per `\"cfetch\"`, prendi `3435` come base \n - Frontend (`fe`, cioè `43`) → `34354` \n - Backend (`server`) → `34352` \n - Database (`mongo`) → `34357` \n - …e così via\n2. Usa il prefisso del progetto, quindi assegna ruoli sequenziali \n - Per `\"cfetch\"`, prendi `3435` come base \n - Web → `34351` \n - Backend → `34352` \n - Database → `34353` \n - …e così via\n### Intervallo di porte valido\n- Le porte devono rientrare in **1024–65535** (le porte di sistema 0‑1023 sono bloccate).\n- **Porte di Sistema (0‑1023)**: assegnate da IETF. Sono strettamente bloccate.\n- **Porte Utente (1024‑49151)**: assegnate da IANA. Usarle con cautela perché potrebbero entrare in conflitto con servizi registrati.\n- **Porte Dinamiche/Private (49152‑65535)**: non assegnate. Sono le più sicure per usi privati o dinamici.\n---"
|
|
3
3
|
}
|
package/locales/ja.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\n
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nキーボードの文字と数字を対応させてポート番号を生成します \nローカルで多数のプロジェクトを実行すると、ポート番号の選択が面倒になります。 \n- 近年、プロジェクトが非常に増えており、実際に試すにはローカルで起動する必要がありますが、その結果ポート番号が衝突します。 \n- ブラウザのタブ(またはブックマーク)を安定させたい場合、プロジェクトのポートが頻繁に変わっては困ります。 \nたとえば、私のマシンには 10 個以上の Nuxt アプリがありますが、すべてがデフォルトで `3000` になると明らかに動作しません。そこで、プロジェクトごとに「ポートを割り当てる」シンプルで一貫した命名規則を考案しました。 \n[Source Blog Post](https://lionad.art/articles/simple-naming-method) \n### 基本概念 \nランダムな数字を選ぶ代わりに、**プロジェクト名をキーボード上の位置に基づく数字列へマッピング**し、ポート番号を *読みやすく*、*覚えやすく* します。 \n結果が有効なポート範囲(**1024–65535**)内に収まり、予約済み/システムポートと衝突しなければ、そのまま使用できます。 \n具体的には、標準 QWERTY キーボードの行・列位置に基づき各文字を 1 桁の数字へ変換します。 \n例: \n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(ポート番号) \n最初の 4 桁だけ(例: `3453`)を使用するか、全桁(例: `34353`)でも構いません。 \nプロジェクトが複数のポート(フロントエンド、バックエンド、データベース等)を必要とする場合は、次の 2 つの方法のうちどれかを選びます。 \n1. プロジェクト接頭辞に「役割サフィックス」を付加 \n - `\"cfetch\"` の場合、ベースとして `3435` を取得 \n - フロントエンド (`fe`, つまり `43`) → `34354` \n - バックエンド (`server`) → `34352` \n - データベース (`mongo`) → `34357` \n2. プロジェクト接頭辞に連番で役割を割り当て \n - `\"cfetch\"` の場合、ベースとして `3435` を取得 \n - Web → `34351` \n - バックエンド → `34352` \n - データベース → `34353` \n### 有効なポート範囲 \n- ポートは **1024–65535** の範囲内である必要があります(システムポート 0‑1023 はブロック)。 \n- **システムポート (0‑1023)**: IETF により割り当てられ、厳密にブロック。 \n- **ユーザーポート (1024‑49151)**: IANA により割り当てられ、登録サービスと衝突する可能性があるため注意。 \n- **動的/プライベートポート (49152‑65535)**: 割り当てられていない。プライベートまたは動的使用に最も安全。 \n--- "
|
|
3
3
|
}
|
package/locales/ko.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\n
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\n문자-숫자 키보드 매핑을 이용해 포트를 생성합니다.\n여러 프로젝트를 로컬에서 실행할 때, 포트 번호 선택이 번거로울 수 있습니다.\n- 최근 몇 년간 새로운 프로젝트가 *너무 많이* 생겨났습니다. 실제로 사용해 보려면 로컬에서 부팅해야 하는 경우가 많고, 그 과정에서 포트 충돌이 발생합니다.\n- 브라우저 탭(또는 북마크)을 안정적으로 유지하려면, 프로젝트의 포트가 계속 바뀌지 않아야 합니다.\n예를 들어 제 머신에는 Nuxt 앱이 10개 이상 있습니다. 모두 기본값인 `3000`을 사용한다면 당연히 동작하지 않겠죠. 그래서 저는 “프로젝트당 포트를 할당한다”는 간단하고 일관된 규칙을 만들었습니다.\n[Source Blog Post](https://lionad.art/articles/simple-naming-method)\n### 핵심 아이디어\n무작위 숫자를 선택하는 대신, **키보드 위치**를 기준으로 프로젝트 이름을 숫자로 매핑합니다. 이렇게 하면 포트가 *읽히기 쉽고* *외우기 쉬운* 형태가 됩니다.\n결과가 유효한 포트 범위(**1024–65535**) 안에 들어가고, 예약/시스템 포트를 피한다면 바로 사용할 수 있습니다.\n구체적으로는 QWERTY 키보드의 각 문자에 행/열 위치를 기반으로 한 자릿수를 매핑합니다.\n예시:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(포트 번호)\n그 후 앞의 4자리(`3453`)를 사용하거나, 더 많은 자릿수를 유지할 수 있습니다(`34353`). 둘 다 괜찮습니다.\n프로젝트가 여러 포트를 필요로 할 경우(프론트엔드, 백엔드, 데이터베이스 등), 다음 두 가지 방법 중 하나를 선택합니다:\n1. 프로젝트 접두사에 “역할 접미”를 추가 \n - `\"cfetch\"`의 경우 기본값 `3435` 사용 \n - 프론트엔드(`fe`, 즉 `43`) → `34354` \n - 백엔드(`server`) → `34352` \n - 데이터베이스(`mongo`) → `34357` \n - …이와 같이\n2. 프로젝트 접두사에 순차적인 역할 번호를 부여 \n - `\"cfetch\"`의 경우 기본값 `3435` 사용 \n - 웹 → `34351` \n - 백엔드 → `34352` \n - 데이터베이스 → `34353` \n - …이와 같이\n### 유효 포트 범위\n- 포트는 **1024–65535** 사이여야 합니다(시스템 포트 0-1023은 차단됨).\n- **시스템 포트(0‑1023)**: IETF가 할당. 절대 사용 금지.\n- **사용자 포트(1024‑49151)**: IANA가 할당. 등록된 서비스와 충돌할 수 있으니 주의.\n- **동적/프라이빗 포트(49152‑65535)**: 할당되지 않음. 사적 혹은 동적 용도로 가장 안전함.\n---"
|
|
3
3
|
}
|
package/locales/pt.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nGere portas usando um mapeamento de tecla letra‑número\nAo executar vários projetos localmente, escolher números de porta pode se tornar incômodo.\n- Nos últimos anos surgiram *tantos* novos projetos. Para testá‑los, costuma‑se precisar iniciá‑los localmente — e as portas começam a colidir.\n- Se você deseja que as abas do navegador (ou favoritos) permaneçam estáveis, a porta de um projeto não deve mudar constantemente.\nPor exemplo, tenho mais de dez aplicativos Nuxt na minha máquina. Se todos usarem a porta padrão `3000`, obviamente isso não funciona. Assim, criei uma regra simples e consistente de nomeação de portas para “atribuir” portas por projeto.\n[Postagem original no blog](https://lionad.art/articles/simple-naming-method)\n### Ideia central\nEm vez de escolher números aleatórios, mapeie **o nome do projeto para números com base no teclado**, de modo que a porta seja *legível* e *memorável*.\nDesde que o resultado esteja dentro da faixa válida de portas (**1024–65535**) e não colida com portas reservadas/sistema, você pode usá‑lo diretamente.\nMais especificamente: usando um teclado QWERTY padrão, atribua a cada letra um único dígito de acordo com sua **posição na linha/coluna**.\nExemplo:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353` (número da porta)\nEntão você pode pegar os primeiros 4 dígitos (ex.: `3453`) ou manter mais dígitos (ex.: `34353`). Ambos são válidos.\nSe um projeto precisar de múltiplas portas (frontend, backend, banco de dados etc.), escolha **uma** das duas abordagens a seguir:\n1. Use o prefixo do projeto e adicione um “sufixo de função” \n - Para `\"cfetch\"`, use `3435` como base \n - Frontend (`fe`, ou seja, `43`) → `34354` \n - Backend (`server`) → `34352` \n - Banco de dados (`mongo`) → `34357` \n - … e assim por diante\n2. Use o prefixo do projeto e atribua funções sequencialmente \n - Para `\"cfetch\"`, use `3435` como base \n - Web → `34351` \n - Backend → `34352` \n - Banco de dados → `34353` \n - … e assim por diante\n### Faixa válida de portas\n- As portas devem estar entre **1024–65535** (as portas do Sistema 0‑1023 são bloqueadas).\n- **Portas de Sistema (0‑1023)**: atribuídas pelo IETF. Estritamente bloqueadas.\n- **Portas de Usuário (1024‑49151)**: atribuídas pela IANA. Use com cautela, pois podem conflitar com serviços registrados.\n- **Portas Dinâmicas/Privadas (49152‑65535)**: não atribuídas. As mais seguras para uso privado ou dinâmico.\n---"
|
|
3
3
|
}
|
package/locales/ru.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{
|
|
2
|
-
"designPhilosophy": "以下是 PortKey 的设计理念:\n\n
|
|
2
|
+
"designPhilosophy": "以下是 PortKey 的设计理念:\n\nГенерировать порты с помощью сопоставления букв к цифрам на клавиатуре.\nКогда вы одновременно запускаете несколько проектов локально, выбор номеров портов становится неприятной задачей.\n- За последние пару лет появилось *очень много* новых проектов. Чтобы действительно попробовать их, часто нужно запустить их локально — и тогда порты начинают конфликтовать.\n- Если вы хотите, чтобы вкладки браузера (или закладки) оставались стабильными, порт проекта не должен постоянно меняться.\nНапример, у меня на машине более десяти приложений Nuxt. Если они все по умолчанию используют `3000`, это, конечно, не сработает. Поэтому я придумал простое, последовательное правило именования портов, чтобы «назначать» порты каждому проекту.\n[Исходный пост в блоге](https://lionad.art/articles/simple-naming-method)\n### Основная идея\nВместо случайного выбора чисел сопоставьте **название проекта цифрам в соответствии с раскладкой клавиатуры**, так что полученный порт будет *читаемым* и *запоминающимся*.\nПока результат находится в допустимом диапазоне портов (**1024–65535**) и не попадает в зарезервированные/системные порты, его можно использовать напрямую.\nБолее конкретно: используя стандартную клавиатуру QWERTY, сопоставьте каждой букве одну цифру на основе её **позиции в строке/столбце**.\nПример:\n`\"cfetch\"` → `c(3) f(4) e(3) t(5) c(3) h(6)` → `34353`(номер порта)\nЗатем можно взять первые 4 цифры (например, `3453`), либо оставить больше цифр (например, `34353`). Оба варианта допустимы.\nЕсли проект требует нескольких портов (frontend, backend, database и т.д.), выберите **один** из следующих подходов:\n1. Использовать префикс проекта, а затем добавить «суффикс роли» \n - Для `\"cfetch\"` берём `3435` как основу \n - Frontend (`fe`, т.е. `43`) → `34354` \n - Backend (`server`) → `34352` \n - Database (`mongo`) → `34357` \n - …и так далее\n2. Использовать префикс проекта, а затем последовательно назначать роли \n - Для `\"cfetch\"` берём `3435` как основу \n - Web → `34351` \n - Backend → `34352` \n - Database → `34353` \n - …и так далее\n### Действительный диапазон портов\n- Порты должны находиться в пределах **1024–65535** (системные порты 0‑1023 заблокированы).\n- **Системные порты (0‑1023)**: назначаются IETF. Строго заблокированы.\n- **Пользовательские порты (1024‑49151)**: назначаются IANA. Используйте с осторожностью, так как они могут конфликтовать с зарегистрированными сервисами.\n- **Динамические/частные порты (49152‑65535)**: не назначаются. Самый безопасный вариант для частного или динамического использования.\n---"
|
|
3
3
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionad/port-key-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "MCP Server for PortKey",
|
|
5
5
|
"bin": "./bin/port-key-mcp.js",
|
|
6
6
|
"type": "module",
|
|
@@ -29,13 +29,6 @@
|
|
|
29
29
|
"README.md",
|
|
30
30
|
"LICENSE"
|
|
31
31
|
],
|
|
32
|
-
"scripts": {
|
|
33
|
-
"build:locales": "node scripts/build-locales.js",
|
|
34
|
-
"build": "pnpm run build:locales && tsc -p tsconfig.build.json",
|
|
35
|
-
"prepublishOnly": "pnpm run build",
|
|
36
|
-
"test": "pnpm run build && vitest run",
|
|
37
|
-
"test:watch": "vitest"
|
|
38
|
-
},
|
|
39
32
|
"author": "Lionad",
|
|
40
33
|
"license": "ISC",
|
|
41
34
|
"repository": {
|
|
@@ -62,5 +55,11 @@
|
|
|
62
55
|
"@types/express": "^5.0.6",
|
|
63
56
|
"@types/node": "^24.7.2",
|
|
64
57
|
"vitest": "4.0.16"
|
|
58
|
+
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build:locales": "node scripts/build-locales.js",
|
|
61
|
+
"build": "pnpm run build:locales && tsc -p tsconfig.build.json",
|
|
62
|
+
"test": "pnpm run build && vitest run",
|
|
63
|
+
"test:watch": "vitest"
|
|
65
64
|
}
|
|
66
|
-
}
|
|
65
|
+
}
|