diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index 3567585cb8..e0d23331b8 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -11,6 +11,10 @@
 		<x-cpu-memory :connection="connection"/>
 	</div>
 	<div>
+		<label>
+			<input type="checkbox" v-model="disableRegistration" @change="updateMeta">
+			<span>disableRegistration</span>
+		</label>
 		<button class="ui" @click="invite">%i18n:@invite%</button>
 		<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
 	</div>
@@ -28,6 +32,7 @@ export default Vue.extend({
 	data() {
 		return {
 			stats: null,
+			disableRegistration: false,
 			inviteCode: null,
 			connection: null,
 			connectionId: null
@@ -37,6 +42,10 @@ export default Vue.extend({
 		this.connection = (this as any).os.streams.serverStatsStream.getConnection();
 		this.connectionId = (this as any).os.streams.serverStatsStream.use();
 
+		(this as any).os.getMeta().then(meta => {
+			this.disableRegistration = meta.disableRegistration;
+		});
+
 		(this as any).api('stats').then(stats => {
 			this.stats = stats;
 		});
@@ -49,6 +58,11 @@ export default Vue.extend({
 			(this as any).api('admin/invite').then(x => {
 				this.inviteCode = x.code;
 			});
+		},
+		updateMeta() {
+			(this as any).api('admin/update-meta', {
+				disableRegistration: this.disableRegistration
+			});
 		}
 	}
 });
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
new file mode 100644
index 0000000000..bfcab9d6a6
--- /dev/null
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -0,0 +1,37 @@
+import $ from 'cafy';
+import Meta from '../../../../models/meta';
+import getParams from '../../get-params';
+
+export const meta = {
+	desc: {
+		ja: 'インスタンスの設定を更新します。'
+	},
+
+	requireCredential: true,
+	requireAdmin: true,
+
+	params: {
+		disableRegistration: $.bool.optional.nullable.note({
+			desc: {
+				ja: '招待制か否か'
+			}
+		}),
+	}
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+	const [ps, psErr] = getParams(meta, params);
+	if (psErr) return rej(psErr);
+
+	const set = {} as any;
+
+	if (ps.disableRegistration === true || ps.disableRegistration === false) {
+		set.disableRegistration = ps.disableRegistration;
+	}
+
+	await Meta.update({}, {
+		$set: set
+	}, { upsert: true });
+
+	res();
+});