msw-search
Original:🇺🇸 English
Translated
MSW search integration — (1) vector search for API docs and implementation guides (msw-guide-mcp or curl against mlua_Document_Retriever / mlua_API_Retriever), (2) REST API search for resources (sprite / animation / sound / resource pack / avatar). Use for 'find details, examples, or related APIs not in .d.mlua', 'need a SpriteRUID', 'monster sprite', 'background image', 'find a sound', 'avatar rendering', etc. Keywords: document search, API details, examples, guide, retriever, resource, sprite, animation, sound, RUID, resource pack, avatar.
7installs
Added on
NPX Install
npx skill4agent add msw-git/msw-ai-coding-plugins-official msw-searchTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →MSW Search
MSW has two distinct search targets. They behave differently, so they are covered in separate sections.
- API docs & implementation guides — Vector search that provides the details, code examples, related APIs, and implementation guidance that lacks.
.d.mlua - Resources — REST API to search and browse sprites, animations, sounds, resource packs, and avatars. The only path for obtaining RUIDs.
Routing Table
| Request type | Go to section |
|---|---|
| "How do I implement this?", "Show me an example", "What related APIs exist?" | Document search |
| ".d.mlua only has the signature; the description is insufficient" | Document search |
| "I don't know the API name (semantic search)" | Document search ( |
| "Implementation guide / best practice / pattern" | Document search ( |
| "I need a SpriteRUID", "Find a sprite for monster / NPC / background" | Resource search |
| "Find an animation / sound / resource pack" | Resource search |
| "Details for this RUID", "Similar resources" | Resource search |
| "Avatar rendering / default avatar" | Resource search |
Section 1 — Document Search (APIs & Guides)
Vector search that supplies the detailed descriptions, code examples, related APIs, and implementation guides missing from .
.d.mluaAccess Methods
The same vector search backend can be accessed through two paths. Results are identical.
| Method | Condition | Usage |
|---|---|---|
| MCP tool | | Call |
| Direct curl | Fallback when MCP is not connected | |
Decision Flow
Need API-related information
│
├─ Checking signature / type / property / enum
│ → Read .d.mlua first (highest priority)
│ → If .d.mlua is insufficient, use vector search
│ (code examples, parameter details, related APIs, etc.)
│
├─ Implementation guide / pattern / best practice
│ → Vector search (type=document)
│
├─ Don't know the API name (semantic search)
│ → Vector search (type=both)
│
└─ How to access vector search:
├─ msw-guide-mcp connected? → MCP tool
└─ Not connected → curlAPI Research Order
Priority 1 — .d.mlua (always first)
If you know the API name, always read first. Signatures, types, properties, event parameters, and enum values can be confirmed here accurately.
.d.mluaPath:
Environment/NativeScripts/{Component,Service,Event,Enum,Logic,Misc}/Name.d.mlua| Situation | Example |
|---|---|
| Confirm method signature | "Does TransformComponent have SetPosition?" |
| Property type / existence | "What is the type of SpriteRendererComponent.RUID?" |
| Event parameter structure | "What are the AttackEvent constructor parameters?" |
| List of enum values | "What are the BodyMoveType values?" |
| Method existence | "What methods does SpawnService have?" |
Priority 2 — Vector search (when .d.mlua is not enough)
.d.mlua| Situation | Search type | Example query |
|---|---|---|
| Need a code example | | |
| Parameter details | | |
| Related API cross-references | | |
| ScriptOverridable check | | |
| Don't know the API name | | |
| "How do I …?" implementation guide | | |
| Pattern / best practice | | |
MCP mapping:=mlua_API_Retriever,type=api=mlua_Document_Retriever.type=document
MCP Tool Usage
When is connected:
msw-guide-mcp| Tool | Maps to type | Description |
|---|---|---|
| | API details for Service / Component / Misc etc. (signatures, parameters, examples) |
| | Authoring manuals, guidelines, MLua usage, and other document-style material |
Tool names and parameters follow the latest MCP schema.
Connection check: If a tool call errors out, it is not connected — fall back to curl.
Direct curl Usage
When is not connected:
msw-guide-mcpGET http://10.10.200.51:31817/search?q={query}&type={type}&limit={limit}| Parameter | Required | Value | Description |
|---|---|---|---|
| O | string | Search query (natural language or API name) |
| X | | Search scope (default: |
| X | integer | Max results (default: 5) |
How to choose type
type| Intent | type |
|---|---|
| Specific API spec (parameters, return type, example) | |
| Implementation guidance (how-to, tutorial, concept) | |
| Ambiguous or broad scope | |
Usage Examples
bash
# Specific API details + example
curl "http://10.10.200.51:31817/search?q=AIComponent&type=api&limit=5"
# Implementation guide
curl "http://10.10.200.51:31817/search?q=how+to+make+an+inventory+system&type=document&limit=5"
# Semantic search (when exact API name is unknown)
curl "http://10.10.200.51:31817/search?q=collision+detection&type=both&limit=10"Response Format
json
{
"results": "formatted text with matching documents (title, section, content)"
}Error Handling
| Code | Meaning | Action |
|---|---|---|
| Service is starting up | Retry after a short wait |
| Internal error (OpenSearch) | Fall back to |
| Connection failure | Service not running | Fall back to |
.d.mlua vs Search — Information Comparison
.d.mlua| Information | .d.mlua | Search |
|---|---|---|
| Method signature / types | O | O |
| Property declarations | O | O |
| Detailed method description (DetailDesc) | X | O |
| Code examples (AdditionalPageContent) | X | O |
| Per-parameter descriptions | X | O |
| Related APIs (SeeAlsoAPIs) | X | O |
| Related guides (SeeAlsoGuides) | X | O |
| ScriptOverridable flag | X | O |
| SyncDirection | Partial | O |
| Localized descriptions (Ko/Ja/Es/Zh) | X | O |
Maker Editor Syntax → .mlua Conversion Rules
Code examples in search results use Maker Editor syntax. They must be converted before being used in a local file.
.mlua| Item | Maker Editor | .mlua file | Note |
|---|---|---|---|
| Override declaration | | | |
| Block | | | Braces → |
| Exec space | | | Annotation must be explicit |
| Property | | | Add |
Type | | | C# int → mlua integer |
Type | | | Same (double) |
Type | | | Same (single) |
(64-bit double) andnumber(32-bit single) are assignable to each other but remain distinct types. Follow thefloatdeclaration..d.mlua
Conversion example — AttackComponent from search results:
-- Maker Editor syntax (search result)
override int CalcDamage(Entity attacker, Entity defender, string attackInfo) {
return 50
}
override boolean CalcCritical(Entity attacker, Entity defender, string attackInfo) {
return _UtilLogic:RandomDouble() < 0.3
}lua
-- Converted to .mlua
@ExecSpace("ServerOnly")
method integer CalcDamage(Entity attacker, Entity defender, string attackInfo)
return 50
end
@ExecSpace("ServerOnly")
method boolean CalcCritical(Entity attacker, Entity defender, string attackInfo)
return _UtilLogic:RandomDouble() < 0.3
endSection 2 — Resource Search (Sprite / Animation / Sound / Resource Pack / Avatar)
REST API for searching and browsing MSW resources.
Never guess or fabricate a RUID — always obtain one through this API.
Base URL
https://resourcesearch-api.future.msw.nxdev.kr- No authentication (public API)
- All endpoints use the prefix
/v3/ - Content-Type: (for POST requests)
application/json; charset=utf-8 - Recommended timeout: 15 seconds
POST body rule — always use a temp file, never inline -d '...'
-d '...'For every POST endpoint in this section (,
, ), write the JSON body to a temp file first
and call curl with :
/v3/search/resources/v3/resources/batch/v3/avatar/render--data-binary "@file"bash
REQ="$TMPDIR/msw_req.json"
cat > "$REQ" <<'JSON'
{ "query": "주황버섯", "types": ["resource_pack"], "categories": ["mob"], "limit": 5 }
JSON
curl -s -X POST https://resourcesearch-api.future.msw.nxdev.kr/v3/search/resources \
-H "Content-Type: application/json; charset=utf-8" \
--data-binary "@$REQ"Why: passing JSON inline () frequently breaks on
non-ASCII input (Korean / Japanese / Chinese / emoji). The shell re-encodes the
argument and the server returns:
-d '{"query":"주황버섯",...}'{ "detail": "There was an error parsing the body" }The temp-file pattern also sidesteps the extra quoting/escaping required on Windows
(PowerShell, Git Bash). Apply it uniformly even when the body is ASCII-only, so the
recipe stays identical across platforms and languages.
On Windows PowerShell, use instead of
and write the file with (or ).
The part is unchanged.
$env:TEMP\msw_req.json$TMPDIR/msw_req.jsonSet-Content -Encoding utf8Out-File -Encoding utf8--data-binary "@file"Resource Types
| type | Description |
|---|---|
| Static image (PNG) |
| Frame-based animation |
| Finished asset bundling sprites + animations + sounds |
| Sound / audio clip |
Categories
| category | Description |
|---|---|
| Monster |
| NPC |
| Map / background / terrain |
| Item |
| Effect |
| Skill |
| UI element |
RUID
A 32-character hex string that uniquely identifies every resource. Example:
"0017da7385e04bc4b2ddbe5949b4b462"- The field in search results is the RUID
id - is a separate Unity asset GUID (used in
assetGuid)spawn_preset - Never guess or fabricate a RUID — always obtain it from an API response
Common Response Fields
json
{
"id": "32-char hex RUID",
"type": "sprite|animationclip|resource_pack|sound",
"category": "mob|npc|map|item|effect|skill|ui",
"names": {
"ko": ["Korean name"],
"en": ["English name"]
},
"assetGuid": "Unity asset GUID (may or may not exist)",
"payload": {
"width": 64,
"height": 64,
"thumbnail": "https://...",
"pivot": {"x": 32, "y": 32},
"frames": [],
"elements": []
}
}Endpoint Summary
| Method | Endpoint | Purpose |
|---|---|---|
| POST | | Natural-language semantic search |
| GET | | Find similar resources |
| GET | | Single resource details |
| POST | | Batch fetch multiple resources |
| GET | | AI-generated multilingual tags |
| GET | | List by type / category |
| GET | | Random resource recommendation |
| GET | | Resource pack details + components |
| GET | | Default avatar body / head RUIDs |
| GET | | Avatar item details |
| POST | | Render an avatar |
Resource Routing Guide
| Situation | Endpoint to use | Reference file |
|---|---|---|
| "Find a slime sprite" | | |
| "Any more monsters like this one?" | | |
| "Details for RUID abc123" | | |
| "Show me a list of monster sprites" | | |
| "What's inside this resource pack?" | | |
| "Render an avatar" | | |
Typical Workflow
1. Semantic search (POST /v3/search/resources) → obtain RUID
2. Detail lookup (GET /v3/resources/{ruid}) → inspect payload
3. For resource packs → pack details (GET /v3/resources/packs/{pack_id}) → individual element RUIDs
4. Assign the individual RUID to SpriteRendererComponent.SpriteRUIDFor detailed Request/Response of each endpoint, refer to the files under.references/resource/
Shared Tips
- Keyword choice — Use the exact name if you know it; natural-language Korean/English also works.
- Adjust — Use a larger value (10+) for broad exploration, smaller (3) for precise lookups.
limit - When search fails:
- Document search fails → read directly and check
.d.mluaJSON.mod/APIMetadata/ - Resource search fails → retry with synonyms or a different category; browse with by type/category.
GET /v3/resources - returns
POST→ you almost certainly used inline{"detail":"There was an error parsing the body"}with a non-ASCII value. Switch to the temp-file pattern (-d '{...}') described in Section 2.--data-binary "@file"
- Document search fails → read
- Composite queries are allowed — e.g. for docs,
AttackComponent CalcCriticalfor resources.red slime jump - No guessing — Never guess API names, RUIDs, or enum values; always confirm via search or references.