@west10tech/constructionwire-mcp 1.0.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 +177 -0
- package/dist/clients/constructionwire-client.d.ts +110 -0
- package/dist/clients/constructionwire-client.d.ts.map +1 -0
- package/dist/clients/constructionwire-client.js +16746 -0
- package/dist/clients/constructionwire-client.js.map +1 -0
- package/dist/config.d.ts +23 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +63 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/services/log-batcher.d.ts +44 -0
- package/dist/services/log-batcher.d.ts.map +1 -0
- package/dist/services/log-batcher.js +81 -0
- package/dist/services/log-batcher.js.map +1 -0
- package/dist/services/log-shipper.d.ts +104 -0
- package/dist/services/log-shipper.d.ts.map +1 -0
- package/dist/services/log-shipper.js +384 -0
- package/dist/services/log-shipper.js.map +1 -0
- package/dist/services/logger.d.ts +92 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +224 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/progress-reporter.d.ts +64 -0
- package/dist/services/progress-reporter.d.ts.map +1 -0
- package/dist/services/progress-reporter.js +192 -0
- package/dist/services/progress-reporter.js.map +1 -0
- package/dist/services/request-tracker.d.ts +55 -0
- package/dist/services/request-tracker.d.ts.map +1 -0
- package/dist/services/request-tracker.js +184 -0
- package/dist/services/request-tracker.js.map +1 -0
- package/dist/tools/constructionwire-tools.d.ts +23 -0
- package/dist/tools/constructionwire-tools.d.ts.map +1 -0
- package/dist/tools/constructionwire-tools.js +8973 -0
- package/dist/tools/constructionwire-tools.js.map +1 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# constructionwire-mcp
|
|
2
|
+
|
|
3
|
+
MCP server with full constructionwire capabilities (75 endpoints)
|
|
4
|
+
|
|
5
|
+
This MCP server includes the following integrations:
|
|
6
|
+
|
|
7
|
+
## Available Tools
|
|
8
|
+
|
|
9
|
+
This MCP server provides 75 tools across 1 integrations:
|
|
10
|
+
|
|
11
|
+
### Constructionwire Tools
|
|
12
|
+
- **constructionwire_reports_list**: List Construction Projects. Returns minimal data appropriate for app search list views. To retrieve complete details, use endpoint /reports/{reportId}. Lets make sure PageSize is max 10.
|
|
13
|
+
- **constructionwire_reports_get**: Get a Construction Project. To retrieve multiple, use multiple id (e.g /reports/100?reportTypeId=1&id=101&id=102).
|
|
14
|
+
- **constructionwire_reports_files**: List Project Files (e.g. Plans/Specs). Set keywordsIn=12 in query to search files (e.g. /reports?reportType=1&keywords={term}&keywordsIn=12).
|
|
15
|
+
- **constructionwire_reports_file**: Get a Project File (e.g. Plans/Specs)
|
|
16
|
+
- **constructionwire_reports_notes**: List Project Notes
|
|
17
|
+
- **constructionwire_reports_note**: Get a Project Note
|
|
18
|
+
- **constructionwire_reports_questions**: List Project Questions
|
|
19
|
+
- **constructionwire_reports_add_question**: Create a Project Question
|
|
20
|
+
- **constructionwire_reports_question**: Get a Project Question
|
|
21
|
+
- **constructionwire_reports_answers**: List Answers to a Question
|
|
22
|
+
- **constructionwire_reports_answer**: Get an Answer to a Question
|
|
23
|
+
- **constructionwire_reports_tasks**: List Project Tasks
|
|
24
|
+
- **constructionwire_reports_task**: Get a Project Task
|
|
25
|
+
- **constructionwire_reports_facets**: List Construction Project Facets
|
|
26
|
+
- **constructionwire_reports_file_terms**: Get Terms and Conditions for Project Files
|
|
27
|
+
- **constructionwire_reports_add_file_terms**: Set request body to "true" to indicate that you read and agree to BuildCentral's Terms and Conditions. Read terms at /2.0/reports/files/terms.
|
|
28
|
+
- **constructionwire_reports_follow**: Create a Project Following
|
|
29
|
+
- **constructionwire_reports_unfollow**: Delete a Project Following
|
|
30
|
+
- **constructionwire_reports_following**: List Project Followings
|
|
31
|
+
- **constructionwire_reports_all_questions**: List Project Questions
|
|
32
|
+
- **constructionwire_companies_list**: List Companies
|
|
33
|
+
- **constructionwire_companies_get**: Get a Company
|
|
34
|
+
- **constructionwire_companies_locations**: List Company Locations
|
|
35
|
+
- **constructionwire_companies_location**: Get a Company Location
|
|
36
|
+
- **constructionwire_companies_people**: List Company's People
|
|
37
|
+
- **constructionwire_companies_projects**: List Company's Project Activities
|
|
38
|
+
- **constructionwire_companies_relationships**: List Company's Relationships
|
|
39
|
+
- **constructionwire_companies_stats**: List Company's Stats
|
|
40
|
+
- **constructionwire_companies_facets**: List Company Facets
|
|
41
|
+
- **constructionwire_companies_following**: List Company Followings
|
|
42
|
+
- **constructionwire_companies_follow**: Create a Company Following
|
|
43
|
+
- **constructionwire_companies_unfollow**: Delete a Company Following
|
|
44
|
+
- **constructionwire_companies_all_locations**: List Locations of multiple Companies
|
|
45
|
+
- **constructionwire_people_list**: List People
|
|
46
|
+
- **constructionwire_people_get**: Get a Person
|
|
47
|
+
- **constructionwire_people_projects**: List Person's Project Activities
|
|
48
|
+
- **constructionwire_people_relationships**: List Person's Relationships
|
|
49
|
+
- **constructionwire_people_stats**: List Person's Stats
|
|
50
|
+
- **constructionwire_people_facets**: List People Facets
|
|
51
|
+
- **constructionwire_people_following**: List People Followings
|
|
52
|
+
- **constructionwire_people_follow**: Create a Person Following
|
|
53
|
+
- **constructionwire_people_unfollow**: Delete a Person Following
|
|
54
|
+
- **constructionwire_folders_list**: List Folders
|
|
55
|
+
- **constructionwire_folders_create**: Create a Folder
|
|
56
|
+
- **constructionwire_folders_get**: Get a Folder
|
|
57
|
+
- **constructionwire_folders_update**: Update a Folder
|
|
58
|
+
- **constructionwire_folders_delete**: Delete a Folder
|
|
59
|
+
- **constructionwire_folders_add_item**: Save Items to a Folder
|
|
60
|
+
- **constructionwire_notes_list**: List Notes
|
|
61
|
+
- **constructionwire_notes_create**: Create a Note
|
|
62
|
+
- **constructionwire_notes_get**: Get a Note
|
|
63
|
+
- **constructionwire_notes_update**: Update a Note
|
|
64
|
+
- **constructionwire_notes_delete**: Delete a Note
|
|
65
|
+
- **constructionwire_news_list**: List Product News
|
|
66
|
+
- **constructionwire_news_get**: Get a Product News
|
|
67
|
+
- **constructionwire_searches_list**: List Saved Searches
|
|
68
|
+
- **constructionwire_searches_create**: Create a Saved Search
|
|
69
|
+
- **constructionwire_searches_get**: Get a Saved Search
|
|
70
|
+
- **constructionwire_searches_update**: Update a Saved Search
|
|
71
|
+
- **constructionwire_subscriptions_create_free**: Create a Free Subscription
|
|
72
|
+
- **constructionwire_subscriptions_usage**: List Subscription Usage Reports
|
|
73
|
+
- **constructionwire_tasks_list**: List Tasks
|
|
74
|
+
- **constructionwire_tasks_create**: Create a Task
|
|
75
|
+
- **constructionwire_tasks_get**: Get a Task
|
|
76
|
+
- **constructionwire_tasks_update**: Update a Task
|
|
77
|
+
- **constructionwire_tasks_delete**: Delete a Task
|
|
78
|
+
- **constructionwire_auth_login**: Create an Access Token
|
|
79
|
+
- **constructionwire_auth_details**: List Authenticated Session Details
|
|
80
|
+
- **constructionwire_auth_logout**: Logout from Authenticated Session
|
|
81
|
+
- **constructionwire_auth_subscription**:
|
|
82
|
+
- **constructionwire_common_get_list**:
|
|
83
|
+
- **constructionwire_common_retail_chains**:
|
|
84
|
+
- **constructionwire_common_states**:
|
|
85
|
+
- **constructionwire_common_counties**:
|
|
86
|
+
- **constructionwire_common_regions**:
|
|
87
|
+
|
|
88
|
+
## Installation
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npm install constructionwire-mcp-b8c9d0e1-f2a3-4456-b789-890123456789
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Environment Setup
|
|
95
|
+
|
|
96
|
+
Create a `.env` file with the following variables:
|
|
97
|
+
|
|
98
|
+
```env
|
|
99
|
+
CONSTRUCTIONWIRE_PASSWORD=your_constructionwire_password_here
|
|
100
|
+
CONSTRUCTIONWIRE_USERNAME=your_constructionwire_username_here
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Usage
|
|
104
|
+
|
|
105
|
+
### Running the server
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Development mode
|
|
109
|
+
npm run dev
|
|
110
|
+
|
|
111
|
+
# Production mode
|
|
112
|
+
npm run build && npm start
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Using with Claude Desktop
|
|
116
|
+
|
|
117
|
+
Add this to your Claude Desktop configuration:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"mcpServers": {
|
|
122
|
+
"constructionwire-mcp": {
|
|
123
|
+
"command": "npx",
|
|
124
|
+
"args": ["constructionwire-mcp-b8c9d0e1-f2a3-4456-b789-890123456789"],
|
|
125
|
+
"env": {
|
|
126
|
+
"CONSTRUCTIONWIRE_PASSWORD": "your_constructionwire_password_here",
|
|
127
|
+
"CONSTRUCTIONWIRE_USERNAME": "your_constructionwire_username_here"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Instructions for Fetching API Keys/Tokens
|
|
135
|
+
- **COMING SOON**
|
|
136
|
+
|
|
137
|
+
## Advanced Features
|
|
138
|
+
|
|
139
|
+
### Request Cancellation
|
|
140
|
+
|
|
141
|
+
This MCP server supports request cancellation according to the [MCP cancellation specification](https://modelcontextprotocol.io/specification/2025-06-18/basic/utilities/cancellation). Clients can cancel in-progress requests by sending a `notifications/cancelled` message with the request ID.
|
|
142
|
+
|
|
143
|
+
When a request is cancelled:
|
|
144
|
+
- The server immediately stops processing the request
|
|
145
|
+
- Any ongoing API calls are aborted
|
|
146
|
+
- Resources are cleaned up
|
|
147
|
+
- No response is sent for the cancelled request
|
|
148
|
+
|
|
149
|
+
### Progress Notifications
|
|
150
|
+
|
|
151
|
+
The server supports progress notifications for long-running operations according to the [MCP progress specification](https://modelcontextprotocol.io/specification/2025-06-18/basic/utilities/progress).
|
|
152
|
+
|
|
153
|
+
To receive progress updates:
|
|
154
|
+
1. Include a `progressToken` in your request metadata
|
|
155
|
+
2. The server will send `notifications/progress` messages with:
|
|
156
|
+
- Current progress value
|
|
157
|
+
- Total value (when known)
|
|
158
|
+
- Human-readable status messages
|
|
159
|
+
|
|
160
|
+
Progress is reported for:
|
|
161
|
+
- Multi-step operations
|
|
162
|
+
- Batch processing
|
|
163
|
+
- Long-running API calls
|
|
164
|
+
- File uploads/downloads
|
|
165
|
+
|
|
166
|
+
Example progress notification:
|
|
167
|
+
```json
|
|
168
|
+
{
|
|
169
|
+
"method": "notifications/progress",
|
|
170
|
+
"params": {
|
|
171
|
+
"progressToken": "operation-123",
|
|
172
|
+
"progress": 45,
|
|
173
|
+
"total": 100,
|
|
174
|
+
"message": "Processing item 45 of 100..."
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Logger } from '../services/logger.js';
|
|
2
|
+
import { RequestOptions } from '../types.js';
|
|
3
|
+
export interface ConstructionwireClientConfig {
|
|
4
|
+
cONSTRUCTIONWIREUSERNAME?: string;
|
|
5
|
+
cONSTRUCTIONWIREPASSWORD?: string;
|
|
6
|
+
api_base_url?: any;
|
|
7
|
+
timeout?: number;
|
|
8
|
+
rateLimit?: number;
|
|
9
|
+
authToken?: string;
|
|
10
|
+
logger?: Logger;
|
|
11
|
+
}
|
|
12
|
+
export declare class ConstructionwireClient {
|
|
13
|
+
private httpClient;
|
|
14
|
+
private config;
|
|
15
|
+
private sessionId;
|
|
16
|
+
private logger;
|
|
17
|
+
constructor(config: ConstructionwireClientConfig);
|
|
18
|
+
private setupRateLimit;
|
|
19
|
+
private resolveBaseUrl;
|
|
20
|
+
private getAuthHeaders;
|
|
21
|
+
/**
|
|
22
|
+
* Initialize the client
|
|
23
|
+
*/
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Get the session ID for this client instance
|
|
27
|
+
*/
|
|
28
|
+
getSessionId(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Make an authenticated request with proper headers and cancellation support
|
|
31
|
+
*/
|
|
32
|
+
private makeAuthenticatedRequest;
|
|
33
|
+
private buildPath;
|
|
34
|
+
reportsList(params: any, options?: RequestOptions): Promise<any>;
|
|
35
|
+
reportsGet(params: any, options?: RequestOptions): Promise<any>;
|
|
36
|
+
reportsFiles(params: any, options?: RequestOptions): Promise<any>;
|
|
37
|
+
reportsFile(params: any, options?: RequestOptions): Promise<any>;
|
|
38
|
+
reportsNotes(params: any, options?: RequestOptions): Promise<any>;
|
|
39
|
+
reportsNote(params: any, options?: RequestOptions): Promise<any>;
|
|
40
|
+
reportsQuestions(params: any, options?: RequestOptions): Promise<any>;
|
|
41
|
+
reportsAddQuestion(params: any, options?: RequestOptions): Promise<any>;
|
|
42
|
+
reportsQuestion(params: any, options?: RequestOptions): Promise<any>;
|
|
43
|
+
reportsAnswers(params: any, options?: RequestOptions): Promise<any>;
|
|
44
|
+
reportsAnswer(params: any, options?: RequestOptions): Promise<any>;
|
|
45
|
+
reportsTasks(params: any, options?: RequestOptions): Promise<any>;
|
|
46
|
+
reportsTask(params: any, options?: RequestOptions): Promise<any>;
|
|
47
|
+
reportsFacets(params: any, options?: RequestOptions): Promise<any>;
|
|
48
|
+
reportsFileTerms(params: any, options?: RequestOptions): Promise<any>;
|
|
49
|
+
reportsAddFileTerms(params: any, options?: RequestOptions): Promise<any>;
|
|
50
|
+
reportsFollow(params: any, options?: RequestOptions): Promise<any>;
|
|
51
|
+
reportsUnfollow(params: any, options?: RequestOptions): Promise<any>;
|
|
52
|
+
reportsFollowing(params: any, options?: RequestOptions): Promise<any>;
|
|
53
|
+
reportsAllQuestions(params: any, options?: RequestOptions): Promise<any>;
|
|
54
|
+
companiesList(params: any, options?: RequestOptions): Promise<any>;
|
|
55
|
+
companiesGet(params: any, options?: RequestOptions): Promise<any>;
|
|
56
|
+
companiesLocations(params: any, options?: RequestOptions): Promise<any>;
|
|
57
|
+
companiesLocation(params: any, options?: RequestOptions): Promise<any>;
|
|
58
|
+
companiesPeople(params: any, options?: RequestOptions): Promise<any>;
|
|
59
|
+
companiesProjects(params: any, options?: RequestOptions): Promise<any>;
|
|
60
|
+
companiesRelationships(params: any, options?: RequestOptions): Promise<any>;
|
|
61
|
+
companiesStats(params: any, options?: RequestOptions): Promise<any>;
|
|
62
|
+
companiesFacets(params: any, options?: RequestOptions): Promise<any>;
|
|
63
|
+
companiesFollowing(params: any, options?: RequestOptions): Promise<any>;
|
|
64
|
+
companiesFollow(params: any, options?: RequestOptions): Promise<any>;
|
|
65
|
+
companiesUnfollow(params: any, options?: RequestOptions): Promise<any>;
|
|
66
|
+
companiesAllLocations(params: any, options?: RequestOptions): Promise<any>;
|
|
67
|
+
peopleList(params: any, options?: RequestOptions): Promise<any>;
|
|
68
|
+
peopleGet(params: any, options?: RequestOptions): Promise<any>;
|
|
69
|
+
peopleProjects(params: any, options?: RequestOptions): Promise<any>;
|
|
70
|
+
peopleRelationships(params: any, options?: RequestOptions): Promise<any>;
|
|
71
|
+
peopleStats(params: any, options?: RequestOptions): Promise<any>;
|
|
72
|
+
peopleFacets(params: any, options?: RequestOptions): Promise<any>;
|
|
73
|
+
peopleFollowing(params: any, options?: RequestOptions): Promise<any>;
|
|
74
|
+
peopleFollow(params: any, options?: RequestOptions): Promise<any>;
|
|
75
|
+
peopleUnfollow(params: any, options?: RequestOptions): Promise<any>;
|
|
76
|
+
foldersList(params: any, options?: RequestOptions): Promise<any>;
|
|
77
|
+
foldersCreate(params: any, options?: RequestOptions): Promise<any>;
|
|
78
|
+
foldersGet(params: any, options?: RequestOptions): Promise<any>;
|
|
79
|
+
foldersUpdate(params: any, options?: RequestOptions): Promise<any>;
|
|
80
|
+
foldersDelete(params: any, options?: RequestOptions): Promise<any>;
|
|
81
|
+
foldersAddItem(params: any, options?: RequestOptions): Promise<any>;
|
|
82
|
+
notesList(params: any, options?: RequestOptions): Promise<any>;
|
|
83
|
+
notesCreate(params: any, options?: RequestOptions): Promise<any>;
|
|
84
|
+
notesGet(params: any, options?: RequestOptions): Promise<any>;
|
|
85
|
+
notesUpdate(params: any, options?: RequestOptions): Promise<any>;
|
|
86
|
+
notesDelete(params: any, options?: RequestOptions): Promise<any>;
|
|
87
|
+
newsList(params: any, options?: RequestOptions): Promise<any>;
|
|
88
|
+
newsGet(params: any, options?: RequestOptions): Promise<any>;
|
|
89
|
+
searchesList(params: any, options?: RequestOptions): Promise<any>;
|
|
90
|
+
searchesCreate(params: any, options?: RequestOptions): Promise<any>;
|
|
91
|
+
searchesGet(params: any, options?: RequestOptions): Promise<any>;
|
|
92
|
+
searchesUpdate(params: any, options?: RequestOptions): Promise<any>;
|
|
93
|
+
subscriptionsCreateFree(params: any, options?: RequestOptions): Promise<any>;
|
|
94
|
+
subscriptionsUsage(params: any, options?: RequestOptions): Promise<any>;
|
|
95
|
+
tasksList(params: any, options?: RequestOptions): Promise<any>;
|
|
96
|
+
tasksCreate(params: any, options?: RequestOptions): Promise<any>;
|
|
97
|
+
tasksGet(params: any, options?: RequestOptions): Promise<any>;
|
|
98
|
+
tasksUpdate(params: any, options?: RequestOptions): Promise<any>;
|
|
99
|
+
tasksDelete(params: any, options?: RequestOptions): Promise<any>;
|
|
100
|
+
authLogin(params: any, options?: RequestOptions): Promise<any>;
|
|
101
|
+
authDetails(params: any, options?: RequestOptions): Promise<any>;
|
|
102
|
+
authLogout(params: any, options?: RequestOptions): Promise<any>;
|
|
103
|
+
authSubscription(params: any, options?: RequestOptions): Promise<any>;
|
|
104
|
+
commonGetList(params: any, options?: RequestOptions): Promise<any>;
|
|
105
|
+
commonRetailChains(params: any, options?: RequestOptions): Promise<any>;
|
|
106
|
+
commonStates(params: any, options?: RequestOptions): Promise<any>;
|
|
107
|
+
commonCounties(params: any, options?: RequestOptions): Promise<any>;
|
|
108
|
+
commonRegions(params: any, options?: RequestOptions): Promise<any>;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=constructionwire-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constructionwire-client.d.ts","sourceRoot":"","sources":["../../src/clients/constructionwire-client.ts"],"names":[],"mappings":"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"}
|